2017-11-17 2 views
-1

지정된 사용자가 작성한 모든 테이블을 표시하는 프로 시저를 작성하려고합니다. 여기에 지금까지 무엇을 가지고 :이 옳은 길 경우 궁금 해서요사용자 PL ​​SQL 프로 시저에 의해 작성된 모든 테이블 표시

CREATE OR REPLACE PROCEDURE user_tables 
@username VARCHAR(50), 
@result varchar(100000) OUTPUT 
AS 
BEGIN  
    -- Execution section 
    Set result = SELECT * FROM ALL_TABLES WHERE OWNER = @username; 


EXCEPTION  
    -- Exception section 
    WHEN no_data_found THEN 
     dbms_output.put_line('User does not exist'); 
    WHEN others THEN 
     dbms_output.put_line('Error!'); 


END; 

, 그리고 어떻게이 작업 여기

+0

에게 있습니다 @ "및"Set "은 Oracle이 아닌 SQL-Server 구문입니다. 그래서 아니오, 이것은 올바른 길이 아닙니다. NO_DATA_FOUND는 잘못된 사용자 이름뿐만 아니라 몇 가지 이유로 발생할 수 있습니다. 나는 CURSOR로 FOR 루프를 제안하고 루프에서 사용자 컨텐츠를 행 단위로 표시한다. – Stilgar

+0

"작성한 모든 테이블"은 아직 존재합니까? 3 개월 전에 USER가 작성한 테이블과 ** 지난 주 ** 테이블을 표시하지 않습니다. 너 신경 안써? 그렇지 않으면,'USER'가 현재 소유하고있는 테이블만을 찾고 있습니다. – mathguy

+0

나는 사용자가 아니라 지정된 사용자를 의미한다고 생각합니다. 그렇다면 all_tables 대신 user_tables를 사용할 수 있습니다. 물론 all_tables는 볼 권한이있는 테이블 만 제공합니다. – Stilgar

답변

0

를 완료 대해 이동해야 할 것은 "힌트

BEGIN 
    FOR tn IN (SELECT table_name FROM all_tables /*WHERE owner = vc_User_Name*/) 
    LOOP 
     -- Display some stuff 
     DBMS_OUTPUT.PUT_LINE(tn.table_name); 
    END LOOP; 
END; 
/