programing

간단한 Oracle 변수 SQL 할당

javamemo 2023. 10. 22. 19:21
반응형

간단한 Oracle 변수 SQL 할당

한 시간 동안 조사를 했음에도 불구하고 변수를 올바르게 정의하고 SQL에 사용하는 방법을 알 수 없습니다.

이것이 지금까지 제가 만든 것입니다.

DECLARE startDate DATE := to_date('03/11/2011', 'dd/mm/yyyy');

그 중에서 나는 다음과 같은 답변을 받습니다.

ORA-06550: 1행, 63열: PLS-00103: 다음 중 하나를 예상할 때 "end-of-file" 기호가 발생했습니다.

begin function package pragma procedure 하위 유형 폼 현재 커서 사용

세부 정보: DELCOME startDate DATE := to_date ('03/11/2011', 'dd/mm/yyyy'); 1행 ORA-06550: 1행, 63열: PLS-00103: 다음 중 하나를 예상할 때 "end-of-file" 기호가 발생했습니다.

begin function package pragma procedure 하위 유형 폼 현재 커서 사용

저는 그런 간단한 일을 하는 방법을 찾고 싶습니다!

변수 선언이 정확합니다.

DECLARE키워드는 PL/SQL 블록의 범위가 지정된 변수를 정의하는 데 사용됩니다.BEGIN그리고.END;). 이 변수를 어떻게 사용하시겠습니까?

다음 PL/SQL이 잘 작동합니다.

DECLARE 
    startDate DATE := to_date('03/11/2011', 'dd/mm/yyyy');
    reccount INTEGER;
BEGIN
    SELECT count(*) INTO reccount 
        FROM my_table tab 
        WHERE tab.somedate < startDate;
    dbms_output.put_line(reccount);
END;

문장을 사용하여 간단한 문자열 대체 변수를 사용할 수도 있습니다.SQL/PLUS 또는 TOAD와 같은 클라이언트에 적합합니다.

DEFINE start_date = "to_date('03/11/2011', 'dd/mm/yyyy')"
SELECT COUNT(*) from my_table tab where tab.some_date < &start_date;

Toad에서 시도하는 작업을 수행하기 위해 변수를 선언할 필요가 전혀 없습니다.단순히 변수에 콜론을 접두사로 붙이면 Toad가 쿼리를 실행할 때 변수 값을 입력하라는 메시지를 표시합니다.예를 들어,

select * from all_tables where owner = :this_is_a_variable;

처음에 작동하지 않으면 편집기의 아무 곳이나 마우스 오른쪽 단추로 클릭하고 "대체 변수 프롬프트"가 선택되어 있는지 확인합니다.

SQL Server에서 변수를 처리하는 방식과 유사하게(또는 SQL*Plus에서 동일한 작업을 수행하려면) 다음과 같이 작성할 수 있습니다.

var this_is_a_variable varchar2(30); 

exec :this_is_a_variable := 'YOUR_SCHEMA_NAME';

print this_is_a_variable;

select * from all_tables where owner = :this_is_a_variable;

그러나 Toad에서 이 작업을 수행하려면 일반적인 "Execute statement" 명령이 아닌 "Execute as script"를 통해 실행해야 합니다.

Oracle의 PL/SQL은 SQL이 아닙니다.

PL/SQL은 절차 언어입니다.SQL은 절차적이지는 않지만 사용자가 "&var" 구문을 통해 입력할 수 있는 "variables"을 정의할 수 있습니다(http://www.orafaq.com/node/515) . 참조).

이것은 오래된 게시물이지만, 만약 누군가가 이 문제에 발을 헛디뎌질 경우(나는 방금 한 것처럼), 당신은 CTE로 이 문제를 처리할 수 있습니다.

with params as (
      select date '2011-11-03' as startdate
      from dual
     )
select . . .
from params cross join
     . . .

SQL Server에서 거의 동일한 구문이 작동합니다(단,date-특정한 것과from dual).

해결책

DEF  startDate = to_date('03/11/2011', 'dd/mm/yyyy');
Select &startDate from dual;

언급URL : https://stackoverflow.com/questions/8039907/simple-oracle-variable-sql-assignment

반응형