ORACLE: 打印表结构脚本
使用测试环境: oracle 11g
DECLARE
v_temp varchar2(32767);
v_time number; -- 次数
v_clob clob;
v_block varchar2(2000);
v_block_size number := 4000 ; -- put_line() 最大2000Byte; --32767Byte
v_length number; -- 总长度
v_amount number := 1000;
v_sql varchar2(4000);
v_long varchar2(32767);
V_OWNER VARCHAR2(150);
V_OBJECT_NAME VARCHAR2(150);
v_object_type VARCHAR2(150);
v_sql_TEXT CLOB ;
-- 打印:SIEMENS TEAMCENTER12 标准脚本
cursor c_LIST IS
SELECT OBJ.OWNER, OBJ.OBJECT_NAME, OBJ.OBJECT_TYPE
FROM SYS.DBA_OBJECTS OBJ
WHERE OBJ.OBJECT_TYPE = 'TABLE' -- P_OBJECT_TYPE
AND OBJ.OWNER= 'INFODBA' -- P_OWNER
AND OBJ.OBJECT_NAME LIKE '%' -- 'ACCT_TABLE' -- P_OBJECT_NAME
ORDER BY OBJ.OWNER, OBJ.OBJECT_NAME ;
-- 环境: oracle 11G 数据库
-- 使用标准打印脚本函数GET_DDL() 打印表(TABLE)、索引(INDEX)、存储过程(PROCEDURE)源代码
CURSOR C_OBJ(P_OWNER VARCHAR2, P_OBJECT_TYPE VARCHAR2, P_OBJECT_NAME VARCHAR2 ) IS
SELECT OBJ.OWNER, OBJ.OBJECT_NAME, OBJ.OBJECT_TYPE,
DBMS_METADATA.GET_DDL(OBJ.OBJECT_TYPE, OBJECT_NAME) SQL_TEXT
FROM
SYS.DBA_OBJECTS OBJ
WHERE OBJ.OBJECT_TYPE = P_OBJECT_TYPE -- 'TABLE' --
AND OBJ.OWNER= P_OWNER --'INFODBA' --
AND OBJ.OBJECT_NAME = P_OBJECT_NAME -- 'ACCT_TABLE' --
ORDER BY OBJ.OWNER ;
BEGIN
FOR R_LIST IN C_LIST LOOP
--FOR R1 IN C_OBJ(P_OWNER=>'INFODBA', P_OBJECT_TYPE=>'TABLE', P_OBJECT_NAME =>'ACCT_TABLE') LOOP
FOR R1 IN C_OBJ(P_OWNER=>r_list.owner, P_OBJECT_TYPE=>r_list.OBJECT_TYPE, P_OBJECT_NAME =>R_LIST.OBJECT_NAME ) LOOP
v_clob := r1.sql_text ;
v_length := dbms_lob.getlength(v_clob);
--v_length := 1 ;
--v_time := ceil( r_vi.text_length / v_block_size);
v_time := ceil( v_length / v_block_size);
if v_time = 0 then
v_time := 1;
end if;
for i in 1..v_time loop
v_temp := substr( v_clob, v_block_size*(i-1)+1, v_block_size ) ;
v_amount := v_block_size*(i-1)+1;
dbms_output.put_line(v_temp);
END LOOP;
dbms_output.put_line('/');
END loop;
END LOOP;
end ;
/
优质生活从拆开始
浙公网安备 33010602011771号