프로시져 생성 질문 입니다. 0 7 1,672

by oOYGOo [PL/SQL] 프로시져 [2013.01.16 17:28:27]


CREATE OR REPLACE PROCEDURE get_source
(v_object_type in varchar2,
v_obejct_name in varchar2,
v_owner in varchar2)
is
v_text long;
BEGIN
SELECT DBMS_METADATA.GET_DDL ('v_object_type', 'v_obejct_name', 'v_owner')
FROM DUAL;
 DBMS_OUTPUT.PUT_LINE('TEXT : '||v_text||' ');
END;
/

by 부쉬맨 [2013.01.16 17:35:47]
SELECT * FROM ALL_SOURCE
이걸로보는게 만드시는게 더편할지도?

by 손님 [2013.01.16 17:43:24]
CREATE OR REPLACE PROCEDURE HR.get_source
(v_object_type in varchar2,
v_obejct_name in varchar2,
v_owner in varchar2)
is 
v_text long;
BEGIN
SELECT DBMS_METADATA.GET_DDL (v_object_type, v_obejct_name, v_owner) into v_text
FROM DUAL;
 DBMS_OUTPUT.PUT_LINE('TEXT : '||v_text||' ');
END;


by 손님 [2013.01.16 17:45:41]
대신에 INTO절은 2건이상 리턴이 되면 에러가 발생합니다. 

by 부쉬맨 [2013.01.16 17:54:15]
into 절은 1건만 받아서 리턴하게되죠
하지만 into 절에 2건의 데이터 

단순히 보신다면

 SELECT
(
  SELECT level 
 FROM dual 
  CONNECT BY LEVEL < 10)
  FROM dual

이러한케이스

by 부쉬맨 [2013.01.16 18:19:00]
CREATE OR REPLACE PROCEDURE get_source 
    (
      v_object_type IN varchar2, 
      v_obejct_name IN varchar2, 
      v_owner IN VARCHAR2 
    ) 
  IS 
    v_text long; 
BEGIN 
   DBMS_OUTPUT.ENABLE ;
  SELECT DBMS_METADATA.GET_DDL (v_object_type, v_obejct_name, v_owner) INTO v_text 
   FROM DUAL; 
  DBMS_OUTPUT.PUT_LINE('TEXT : '||v_text||' '); 
END;

실행은
DECLARE 
 V_OBJECT_TYPE VARCHAR2(32767);
 V_OBEJCT_NAME VARCHAR2(32767);
 V_OWNER VARCHAR2(32767);

BEGIN 
 V_OBJECT_TYPE := 'PROCEDURE';
 V_OBEJCT_NAME := 'KK';
 V_OWNER := 'IDO';

 IDO.GET_SOURCE ( V_OBJECT_TYPE, V_OBEJCT_NAME, V_OWNER );
 COMMIT; 
END;

by 부쉬맨 [2013.01.16 18:31:22]
SELECT DBMS_METADATA.GET_DDL (upper(v_object_type), upper(v_obejct_name), upper(v_owner)) INTO v_text

편의성을 생각하신다면 이문장으로 대체하세요.

by oOYGOo [2013.02.08 16:05:04]

이제서야 글 보게 되네요 ㅠ 답변 정말 감사 드립니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입