T-SQL에서처럼 PL/SQL에서 변수를 선언하고 사용하는 방법은 무엇입니까?
SQL Server에서는 저장 프로시저의 본문을 테스트할 때 본문을 SSMS에 복사하고 페이지 맨 위에 있는 변수를 선언한 후 샘플 값으로 설정하고 본문을 그대로 실행합니다.
예를 들어, 프로시저가
CREATE PROC MySampleProc
@Name VARCHAR(20)
AS
SELECT @Name
그럼 내 테스트 SQL은
DECLARE @Name VARCHAR(20)
SET @Name = 'Tom'
SELECT @Name
이에 해당하는 Oracle PL/SQL은 무엇입니까?
지금까지 나온 것 중 가장 비슷하지만 "PLS-00428: 이 SELECT 문에 INT 절이 필요합니다"라고 표시됩니다.
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
select myname from DUAL;
END;
이것은 제가 정말로 하고 싶은 일의 더 좋은 예입니다.
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = myname;
END;
그러나 다시 한 번 말하지만, 레코드가 다른 테이블에 저장되지 않고 화면에 인쇄되기를 원할 때 'INTO'가 필요합니다.
해결:
@Allan 덕분에 충분히 잘 작동합니다.Oracle SQL Developer는 사용자가 제공하는 매개 변수 값을 기억하는 것 같습니다.그러나 PL/SQL Developer는 이 문제에 관여하고 싶지 않습니다.

[스크립트로 실행(Run As Script)]를 선택하면 기본값이 적용되지만 결과는 그리드/스프레드시트가 아닌 ASCI 텍스트로만 반환됩니다.

수정된 답변
다른 프로그램에서 이 코드를 호출하지 않을 경우 PL/SQL을 건너뛰고 바인드 변수를 사용하여 SQL에서 엄격하게 수행하는 옵션이 있습니다.
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
Toad 및 SQL Developer와 같은 많은 도구에서var그리고.exec스테이트먼트를 지정하면 프로그램에서는 값을 입력하도록 요구됩니다.
원답
T-SQL과 PL/SQL의 큰 차이점은 Oracle이 쿼리의 결과를 암묵적으로 반환하지 못하도록 한다는 것입니다.결과는 항상 어떤 식으로든 명시적으로 반환되어야 합니다.가장 간단한 방법은DBMS_OUTPUT(에 상당하는 값print) 변수를 출력하려면:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
그러나 결과 세트를 반환하려는 경우에는 이 방법이 크게 도움이 되지 않습니다.이 경우 컬렉션 또는 레퍼서를 반환해야 합니다.그러나 이러한 솔루션 중 하나를 사용하려면 함수 또는 프로시저에서 코드를 포장하고 결과를 소비할 수 있는 것부터 함수/프로시저를 실행해야 합니다.다음과 같이 동작하는 함수는 다음과 같습니다.
CREATE FUNCTION my_function (myname in varchar2)
my_refcursor out sys_refcursor
BEGIN
open my_refcursor for
SELECT *
FROM Customers
WHERE Name = myname;
return my_refcursor;
END my_function;
오라클 PL/SQL에서 여러 행을 반환할 수 있는 쿼리를 실행하는 경우 결과에 대해 반복하려면 커서가 필요합니다.가장 간단한 방법은 for 루프를 사용하는 것입니다.예를 들어 다음과 같습니다.
declare
myname varchar2(20) := 'tom';
begin
for result_cursor in (select * from mytable where first_name = myname) loop
dbms_output.put_line(result_cursor.first_name);
dbms_output.put_line(result_cursor.other_field);
end loop;
end;
행을 "1" 을 할 수 .select...into...「 」, 「 」:
declare
myname varchar2(20);
begin
select first_name into myname
from mytable
where person_id = 123;
end;
변수는 정의되지 않고 선언됩니다.
이는 pl/sql 블록에서 선언 변수가 중복될 수 있습니다.
그러나 여기를 참조해 주세요.
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/fundamentals.htm#i27306
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/overview.htm
갱신:
참조: 다이내믹 SQL을 실행하는 Oracle PL/SQL 익명 블록에서 결과 집합/커서를 반환하는 방법
언급URL : https://stackoverflow.com/questions/10886568/how-do-i-declare-and-use-variables-in-pl-sql-like-i-do-in-t-sql
'programing' 카테고리의 다른 글
| Oracle '파티션 기준' 및 'Row_Number' 키워드 (0) | 2023.03.01 |
|---|---|
| C# HttpClient 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다. (0) | 2023.03.01 |
| woocommerce 위젯 "속성별로 제품 필터링"에 사용할 수 없는 제품이 표시됨 (0) | 2023.03.01 |
| 여러 파라미터를 사용하는 AngularJS $broadcast (0) | 2023.03.01 |
| 반응 선택:"경고: Prop 'id'가 일치하지 않음"을 해결하려면 어떻게 해야 합니까? (0) | 2023.03.01 |