익명 블록 안에 선택 결과 표시
프로시저 내부에서 SELECT를 디버깅하려고 하는데, 익명의 블록을 사용하여 이 작업을 시도하고 있습니다.SQL Developer에서 마지막 SELECT 문을 간단히 반환했으면 좋겠는데 다음과 같은 오류가 발생합니다.
ORA-06550: line 21, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
절차 내에 해당 선택에 대한 INT가 있습니다. 디버깅을 위해 마지막 선택 문에 대한 결과를 간단히 얻을 수 있는 간단한 방법이 있습니까?코드가 실제 절차 내부와 최대한 유사하도록 익명의 블록과 변수를 사용하여 코드를 변경할 필요가 없습니다.
set serveroutput on format wrapped;
DECLARE
p_cd_doc_type number;
p_dc_doc_code varchar2(200);
p_dt_base date;
p_qt_days number;
p_vl_mov_total number;
p_qt_transac number;
v_dt_max date;
v_dt_min date;
begin
p_dt_base := sysdate;
p_qt_days := 1;
v_dt_max := trunc(p_dt_base) + 1;
v_dt_min := v_dt_max - p_qt_days;
p_vl_mov_total := 0;
DBMS_OUTPUT.PUT_LINE('v_dt_max = ' || v_dt_max);
DBMS_OUTPUT.PUT_LINE('v_dt_min = ' || v_dt_min);
select *
from tb_cad_cliente a join tb_trn_transacao b
on a.cd_cliente = b.cd_cliente
where a.cd_doc_type = p_cd_doc_type
and a.dc_doc_code = p_dc_doc_code
and b.dt_row between v_dt_min and v_dt_max
and b.cd_status = 3;
end;
이 방법을 사용하여 결과를 쉽게 인쇄할 수 있습니다.
declare
your_variable varchar2(19);
BEGIN
DBMS_OUTPUT.PUT_LINE('init..');
FOR x IN (SELECT your_column
FROM you_table
where rownum<2
order by 1)
LOOP
DBMS_OUTPUT.PUT_LINE(x.your_column);
END LOOP;
END;
오라클 12c 이상용
declare
rfc sys_refcursor;
begin
open rfc for select * from table;
dbms_sql.return_result(rfc);
end;
선택 값을 반환하려면 컨테이너(기준 커서 또는 REF 커서)에 선택해야 합니다.선언문에 다음을 포함해야 합니다.ref_cursor_out SYS_REFCURSOR;
선택한 항목을 다음으로 변경합니다.
select * into ref_cursor_out ...
SQL 개발자에는 IDE에 결과 세트를 그리드에 로드하여 볼 것을 지시하는 옵션(Toad 사용자이므로 SD의 위치를 잊어버립니다)이 있습니다.
[edit : @Dookie의 댓글당, 캐치 감사합니다!]
오류
제가 알기로는 디버그에 사용하는 도구가 무엇이든 간에 PL/sql 블록(익명 및 이름)은 PL/sql 컴파일러에 유효해야 합니다.사실 당신의 블록은 PL/SQL 컴파일러에 유효하지 않으며, 당신의 오류는 당신에게 알려줄 수 있는 것이고, Sql Developer가 아닌 PL/SQL 컴파일러에서 나온 것입니다.
PLS-00428: 이 SELECT 문에 INT 절이 필요합니다. 원인:SELECT INTO 문의 INTO 절이 누락되었습니다.예를 들어 코드가 SELECT depno, dname, loc from depthwhere... 대신 SELECT depno, dname, loc into dep_rec from depthwhere...처럼 보일 수 있습니다.PL/SQL에서는 INT 절 없이 하위 쿼리만 작성됩니다.작업:필요한 INT 절 추가
그리고.
ORA-06550: 행 문자열, 열 문자열 원인: 일반적으로 PL/SQL 컴파일 오류입니다.액션: 없음
왜오류
Pl/sql 오류가 나타나면 코드 및 설명서에서만 조사할 수 있습니다.정적 SQL 문에서 이름 확인
PS: 경로는 항상 동일합니다.
최근에 MSSQL에서 PLSQL로 변경했는데 분석을 위한 절차에서 테이블로 반환값이 누락되었습니다.저는 테이블을 두 단계씩 반환하는 단순한 동적 쿼리를 작성했습니다.누군가가 사용할 수도 있습니다.
/*
rkry20150929: Return table from anonymous block
*/
declare
v_stmt varchar2(1000);
c int;
BEGIN
select count(*) into c from user_tables where table_name = upper('tmp_result');
if c>0
THEN
v_stmt := 'truncate table tmp_result';
execute immediate v_stmt;
v_stmt := 'drop table tmp_result';
execute immediate v_stmt;
end if;
v_stmt :='CREATE GLOBAL TEMPORARY TABLE tmp_result on commit preserve rows AS ';
v_stmt:= v_stmt ||
/*-----THERE FILL SQL COMMAND-----------*/'
SELECT ''Result select to table in anonymous block '' MyColumn FROM DUAL
';/*-----THERE FILL SQL COMMAND-----------*/
execute immediate v_stmt;
End;
/*FIRST EXECUTE TO HERE */
SELECT * FROM tmp_result;
언급URL : https://stackoverflow.com/questions/6455566/display-select-results-inside-anonymous-block
'programing' 카테고리의 다른 글
목표-C에서 NSDate를 현재 UTC로 설정 (0) | 2023.10.30 |
---|---|
트리거(ORA-39083, ORA-00942)와 관련된 Oracle IMPDP REMAP_SCHMA 문제에 대한 좋은 해결 방법이 있습니까? (0) | 2023.10.30 |
스타일시트와 xslt proc로 xslt를 사용하여 xml에서 요소를 제거하는 방법은 무엇입니까? (0) | 2023.10.30 |
봄맞이 보안에 개미 사냥꾼이 여럿 등장합니다. (0) | 2023.10.30 |
내용 편집 가능한 div의 새 줄에서 이벤트 트리거 (0) | 2023.10.30 |