Oracle SQL Developer 코드 창에서 변수를 사용하여 SQL 코드 실행
Oracle SQL Developer를 사용하여 코드를 작성하고 있습니다.다음과 같은 간단한 Select 문이 있습니다.
SELECT
CFS.CAE_SEC_ID,
CFS.FM_SEC_CODE,
CFS.LAST_USER_ID,
case
when 1 = 1 then
sl.usbank_to_edit
else
case
when 'ENT\CB174' = CFS.last_user_id then
sl.owner_to_edit
else
sl.to_edit
end
end canEdit
FROM
CAEDBO.CAE_FOF_SECURITY CFS
INNER JOIN caedbo.CAE_DATA_SET_ELEMENT CDSE_STAT
ON (CDSE_STAT.DATA_SET_ELEMENT_ID = CFS.APPR_STATUS)
INNER JOIN caedbo.CAE_STATE_LOOKUP sl
ON (sl.object_state = CDSE_STAT.data_set_element_id)
where
cfs.CAE_SEC_ID in (3741, 3744, 3748, 3752);
그러나 나는 여기에 변수를 추가하고 아래와 같이 문에서 변수를 참조하고 코드 창에서도 실행하고 싶습니다.어떻게 하면 정확하게 할 수 있습니까?
DECLARE
p_USBank_n NUMBER;
p_user_id_c VARCHAR2(20);
BEGIN
p_USBank_n := 1;
p_user_id_c := 'ENT\CB174';
SELECT
CFS.CAE_SEC_ID,
CFS.FM_SEC_CODE,
CFS.LAST_USER_ID,
case
when p_USBank_n = 1 then
sl.usbank_to_edit
else
case
when p_user_id_c = CFS.last_user_id then
sl.owner_to_edit
else
sl.to_edit
end
end canEdit
FROM
CAEDBO.CAE_FOF_SECURITY CFS
INNER JOIN caedbo.CAE_DATA_SET_ELEMENT CDSE_STAT
ON (CDSE_STAT.DATA_SET_ELEMENT_ID = CFS.APPR_STATUS)
INNER JOIN caedbo.CAE_STATE_LOOKUP sl
ON (sl.object_state = CDSE_STAT.data_set_element_id)
where
cfs.CAE_SEC_ID in (3741, 3744, 3748, 3752);
END;
SQL 창에서 이 작업을 실행하면 다음과 같은 메시지가 표시됩니다.
Error report:
ORA-06550: line 8, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
제가 이 글을 올바르게 읽고 있다면, 당신은 Oracle 대체 변수를 찾고 있다고 생각합니다.
&val을 사용하여 값을 입력할 때마다 프롬프트가 표시되고, @ 런타임을 사용하여 프롬프트가 표시됩니다.
SELECT
CFS.CAE_SEC_ID,
CFS.FM_SEC_CODE,
CFS.LAST_USER_ID,
CASE
when &p_USBank_n = 1 then
sl.usbank_to_edit
else
CASE
when '&p_user_id_c' = CFS.last_user_id then
sl.owner_to_edit
else
sl.to_edit
end
end canEdit
FROM
CAEDBO.CAE_FOF_SECURITY CFS
INNER JOIN caedbo.CAE_DATA_SET_ELEMENT CDSE_STAT
ON (CDSE_STAT.DATA_SET_ELEMENT_ID = CFS.APPR_STATUS)
INNER JOIN caedbo.CAE_STATE_LOOKUP sl
ON (sl.object_state = CDSE_STAT.data_set_element_id)
where
CFS.CAE_SEC_ID IN (3741, 3744, 3748, 3752);
값을 유지하려면 &&var로 변경한 다음 사용합니다.
UNDEFINE var
분명히 말하면
이제 다음과 같이 DEFINE을 사용하여 페이지 맨 위에 설정할 수 있습니다(따라서 프롬프트를 피할 수 있습니다).
DEFINE XYZ = 5
DEFINE AAA = to_date('10/10/2010','mm/dd/rrrr')
DEFINE textString = AaBbCc
SELECT &&XYZ b, &&AAA a, '&&textString' textString
from dual ;
B A TEXTSTRING
---------------------- ------------------------- ----------
5 10.OCT.2010 00:00 AaBbCc
--typing define will show you all the "defined" values
define
DEFINE XYZ = "5"
DEFINE TEXTSTRING = "AaBbCc"
DEFINE AAA = "to_date('10/10/2010','mm/dd/rrrr')"
이중 앰퍼샌드는 정의를 해제하거나(위 참조) 재정의할 때까지 값을 '유지'합니다.
오류 메시지가 문제를 설명합니다. PL/SQL 블록 내에서 선택해야 합니다.INTO
쿼리 결과를 일반 SQL로 스크리닝할 수 있는 대로 덤프할 수는 없습니다. (방법은 있지만 여기서 달성하려는 것처럼 보이는 것에는 너무 복잡할 수 있습니다.)
@Harrison이 제안한 바와 같이 대체 변수를 사용하지 않으려면 처음에 정의한 바인딩 변수를 별도의 익명 블록에서 사용할 수 있습니다.그런 다음 일반 SQL에서 바인딩 변수를 참조할 수 있습니다.
var p_usbank_n number;
var p_user_id_c varchar2(20);
exec :p_usbank_n := 1;
exec :p_user_id_c := 'ENT\CB174';
select
cfs.cae_sec_id,
cfs.fm_sec_code,
cfs.last_user_id,
case
when 1 = :p_usbank_n then
sl.usbank_to_edit
when cfs.last_user_id = :p_user_id_c then
sl.owner_to_edit
else
sl.to_edit
end as canEdit
from
caedbo.cae_fof_security cfs
inner join caedbo.cae_data_set_element cdse_stat
on (cdse_stat.data_set_element_id = cfs.appr_status)
inner join caedbo.cae_state_lookup sl
on (sl.object_state = cdse_stat.data_set_element_id)
where
cfs.cae_sec_id in (3741, 3744, 3748, 3752);
언급URL : https://stackoverflow.com/questions/4672019/run-sql-code-with-variables-in-oracle-sql-developer-code-window
'source' 카테고리의 다른 글
SQL Server의 출력 매개 변수를 사용하여 Oracle 저장 프로시저 호출 (0) | 2023.07.21 |
---|---|
Oracle 트랜잭션에서 커밋되지 않은 작업이 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.07.21 |
@스프링 부츠스프링 부트가 아닌 응용 프로그램에 대한 테스트 (0) | 2023.07.21 |
런타임에 Python 모듈 버전 확인 (0) | 2023.07.21 |
열 유형을 지정하는 판다에 빈 데이터 프레임 만들기 (0) | 2023.07.21 |