sourcecode

오라클의 SELECT 쿼리에서 변수 선언 및 값 설정

copyscript 2023. 3. 25. 11:45
반응형

오라클의 SELECT 쿼리에서 변수 선언 및 값 설정

SQL Server에서는 다음을 사용할 수 있습니다.

DECLARE @variable INT;
SELECT @variable= mycolumn from myTable;

Oracle에서도 동일한 작업을 수행할 수 있는 방법은 무엇입니까?현재 다음을 시도하고 있습니다.

DECLARE COMPID VARCHAR2(20);
SELECT companyid INTO COMPID from app where appid='90' and rownum=1;

왜 안 되는 죠?

여기에 이미지 설명 입력

선택 대상

DECLARE
   the_variable NUMBER;

BEGIN
   SELECT my_column INTO the_variable FROM my_table;
END;

쿼리가 1개의 행만 반환하는지 확인합니다.

기본적으로 SELECT INTO 문은 하나의 행만 반환해야 합니다.그렇지 않으면 PL/SQL은 사전 정의된 예외 TOO_MANY_ROWS를 발생시키고 INTO 절의 변수 값은 정의되지 않습니다.WHERE 절이 하나의 행에만 일치할 수 있을 만큼 충분히 구체화되어 있는지 확인하십시오.

행이 반환되지 않으면 PL/SQL은 NO_DA를 발생시킵니다.TA_FOUND. COUNT(*)나 AVG()와 같은 집계 함수의 결과를 선택하여 이 예외를 방지할 수 있습니다.이러한 함수는 조건에 일치하는 행이 없는 경우에도 단일 값을 반환합니다.

A 선택...BULK COLLECT INTO 문은 여러 행을 반환할 수 있습니다.결과를 유지할 수집 변수를 설정해야 합니다.결과 세트 전체를 유지하는 데 필요한 만큼 확장되는 연관 배열 또는 중첩된 테이블을 선언할 수 있습니다.

암시 커서 SQL과 그 속성 %NOTFOUND, %FOUND, %ROWCOUNT 및 %ISOPEN은 SELECT INTO 문의 실행에 대한 정보를 제공합니다.

무엇을 원하는지는 잘 모르겠지만 PL/SQL에서는 간단하게 할 수 있습니다.

DECLARE
  v_variable INTEGER;
BEGIN
  SELECT mycolumn
    INTO v_variable
    FROM myTable;
END;

올리.

추가 사항 1개:

에서 변환하는 경우tsql로.plsql에 대해 걱정해야 한다.no_data_found예외.

DECLARE
   v_var NUMBER;
BEGIN
   SELECT clmn INTO v_var FROM tbl;
Exception when no_data_found then v_var := null; --what ever handle the exception.
END;

tsql한다면no data found변수는 다음과 같습니다.null하지만 아니다exception

ORA-01422: exact fetch가 요청된 행 수보다 많은 행을 반환합니다.

where 조건을 사용하여 정확한 레코드를 지정하지 않으면 위의 예외가 발생합니다.

DECLARE
     ID NUMBER;
BEGIN
     select eid into id from employee where salary=26500;
     DBMS_OUTPUT.PUT_LINE(ID);
END;

단일 행 출력을 select에서 query로 변수에 저장하는 경우:

v_display varchare(20)를 선언합니다. 사용자 이름을 v_display FROM 사용자 이름으로 선택합니다. 여기서 user_id = '7';

단일 레코드의 값을 변수 v_variable에 저장합니다.


select에서 query로 출력되는 여러 행을 변수에 저장하는 경우:

listagg 기능을 사용해야 합니다.listagg는 컬럼의 결과 행을 단일 컬럼으로 연결하며 그것들을 구별하기 위해 특수 기호를 사용할 수 있습니다.그룹 내(사용자 이름으로 정렬됨)에서 아래 SELECT listagg(사용자 이름 | ' , )와 같이 쿼리를 v_username FROM 사용자로 사용합니다.

언급URL : https://stackoverflow.com/questions/7553901/declaring-a-variable-and-setting-its-value-from-a-select-query-in-oracle

반응형