ACCEPT p_username PROMPT 'Enter Username : '
ACCEPT p_password PROMPT 'Enter New Password for Username : '
VARIABLE g_output VARCHAR2(4000)
DECLARE
CURSOR NAME IS SELECT TABLE_NAME FROM DBA_TABLES
WHERE OWNER LIKE '%&p_username%';
DDL_DROP VARCHAR2(200);
BEGIN
FOR TNAME IN NAME
LOOP
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE' || ' ' || TNAME.TABLE_NAME;
:g_output := :g_output || ' ' || TNAME.TABLE_NAME;
END;
END LOOP;
END;
/
PRINT g_output
안녕하세요, 저는 PL/SQL을 처음 사용하고 사용자 테이블을 삭제하고 궁극적으로 테이블 삭제 후 스크립트를 변경하려고합니다. EXECUTE IMMEDIATE 명령에 문제가 있습니다. EXECUTE IMMEDIATE 행을 제거하면 스크립트가 작동합니다. 루프 내에서 테이블 이름을 인쇄하여 테스트 한 결과 올바른 테이블 수와 해당 이름을 얻을 수있었습니다.PL/SQL DDL 즉시 실행
감사합니다. 감사합니다.
제안 사항을 반영하도록 코드를 편집했지만 여전히 작동하지 않습니다. 같은 오류가 발생했습니다.
ACCEPT p_username PROMPT 'Enter Username : '
ACCEPT p_password PROMPT 'Enter New Password for Username : '
VARIABLE g_output VARCHAR2(4000)
DECLARE
NAME SYS_REFCURSOR;
DDL_WORD VARCHAR2(200);
BEGIN
OPEN NAME FOR SELECT TABLE_NAME FROM DBA_TABLES
WHERE OWNER LIKE '%&p_username%';
LOOP
FETCH NAME INTO DDL_WORD;
EXIT WHEN NAME%NOTFOUND;
EXECUTE IMMEDIATE 'DROP TABLE "' || DDL_WORD || '" CASCADE CONSTRAINTS';
:g_output := :g_output || ' ' || DDL_WORD;
END LOOP;
CLOSE NAME;
END;
/
PRINT g_output
데이터 사전의 모든 것은 대문자입니다. '% '와 같은 소유자를 가져야합니다. || 위 (p_username) || '%''. 실제로 사용자 당 하나의 테이블이 있습니까? – Ben
14 개의 테이블이있는 사용자 이름을 입력하고 있습니다. 나는 그들 자신을 만들었고 테이블에는 데이터가있다. – ReiRei