조항을 사용하여 즉시 실행하십시오
-
06-07-2019 - |
문제
모두,
나는 일반적으로 저장된 절차를 처음 접했지만 특히 오라클에있는 사람들과 어려움을 겪고 있습니다. 나는 내가 달성하려는 것에 대한 매우 간단한 예를 만들었 으며이 단순화 된 버전과 동일한 오류를 얻고 있습니다.
저장된 절차는 다음과 같습니다.
CREATE OR REPLACE PROCEDURE ashish_test
AUTHID CURRENT_USER IS
BEGIN
DECLARE
v_tab VARCHAR2(50);
v_strSQL VARCHAR2(50);
BEGIN
v_strSQL := 'SELECT * FROM :1';
v_tab := 'ex.emp';
EXECUTE IMMEDIATE v_strSQL USING v_tab;
END;
END;
위의 저장된 절차를 사용하여 호출 할 때 CALL ashish_test()
, 나는 얻다 :
오류 메시지 http://web1.twitpic.com/img/12831839-06a3a36df5d5a0a839eb83d9e59d25.4a3936b8-scaled.jpg
기반 이 기사 (예 : 7-1을보십시오), USING
키워드는 번호가 매겨진 자리 표시자를 교체해야합니다 (:1
) 이내에 v_strSQL
저장된 값으로 v_tab
. 그러나 계속해서 유효하지 않은 테이블 오류가 발생합니다. 나는 그것이 그 이유라고 생각합니다 EXECUTE IMMEDIATE
어떤 이유로 자리 표시자를 값으로 바꿀 수는 없지만 왜 그런지 잘 모르겠습니다. 내가 여기서 바보 같은 일을하고 있는지 아는 사람이 있습니까?
Oracle 10G 데이터베이스에서 이것을 실행하고 PL/SQL 개발자를 사용하고 있습니다.
해결책
사용 절은 테이블 이름이 아닌 바인드 변수 (즉, select 문에서 열 이름을 사용하는 경우)에만 해당됩니다. 일반적인 사용법은 다음과 같습니다.
Select col1 from table1 where col2 = :a
가변 테이블 이름을 사용하려면 다음과 같은 것을 사용하십시오.
v_tab := 'ex.emp';
v_strSQL := 'SELECT * FROM ' || v_tab;
EXECUTE IMMEDIATE v_strSQL;
제휴하지 않습니다 StackOverflow