32767oracle写文件,oracle 写文件

/

--CREATE OR REPLACE DIRECTORY FILEPATH1 AS 'D:\MYPROC'

--PROC_COLLEGE_SMS_DISPATCHER_V2

--PROC_IMPORT_NODEAL.SQL

/*

将数据写入文件,以下sql将存储过程的代码分别写入文件;

视图ALL_DIRECTORIES可以查看创建的DIRECTORY

有时会出现:oracle字符串缓冲区太小的错误

写excel也可以

*/

DECLARE

TYPE CUR IS REF CURSOR;

V_CUR CUR;

MYTXT VARCHAR2(4000);

L_FILE UTL_FILE.FILE_TYPE;   --utl_file包的操作需要指定一个file_type型的对象

MX VARCHAR2(100);

BEGIN

FOR X IN (

SELECT AO.OBJECT_NAME ONAME

FROM DBA_OBJECTS AO

WHERE AO.OWNER='EDU'

AND AO.OBJECT_TYPE='PROCEDURE'

)

LOOP

MX:=X.ONAME;

L_FILE :=UTL_FILE.FOPEN('FILEPATH1',MX||'.SQL','W');

UTL_FILE.PUT_LINE(L_FILE,'CREATE OR REPLACE');

OPEN V_CUR FOR

SELECT DS.TEXT

FROM DBA_SOURCE DS

WHERE DS.OWNER='EDU'

AND DS.NAME=MX;

LOOP

FETCH  V_CUR INTO MYTXT;

EXIT WHEN V_CUR%NOTFOUND;

UTL_FILE.PUT(L_FILE,MYTXT);

END LOOP;

CLOSE  V_CUR;

UTL_FILE.FFLUSH(L_FILE);

UTL_FILE.FCLOSE(L_FILE);

END LOOP;

END;

/*

SELECT DS.TEXT

FROM DBA_SOURCE DS

WHERE DS.OWNER='JASON'

AND DS.NAME=''

create or replace directory UTL_DIR as 'D:\wang';

/

create or replace procedure p_exportDLL(p_table_name varchar2,p_filename varchar2) is

begin

declare

l_file     UTL_FILE.FILE_TYPE;

l_buffer   VARCHAR2(1000);

l_amount   BINARY_INTEGER := 100;

l_pos      INTEGER := 1;

l_clob     clob;

l_clob_len INTEGER;

begin

select dbms_metadata.get_ddl('PROCEDURE',p_table_name,'WARDER' )||';' into l_clob from dual;

l_clob_len := DBMS_LOB.GETLENGTH(l_clob);

l_file     := UTL_FILE.FOPEN('UTL_DIR', p_filename||'.sql', 'a', 1000);

WHILE l_pos < l_clob_len LOOP

DBMS_LOB.READ(l_clob, l_amount, l_pos, l_buffer);

UTL_FILE.put(l_file, l_buffer);

l_pos := l_pos + l_amount;

END LOOP;

UTL_FILE.FCLOSE(l_file);

--if @@error

end;

end p_exportDLL;

/

CREATE OR REPLACE PROCEDURE p_whole AS

BEGIN

FOR x IN (SELECT OBJECT_NAME FROM ALL_OBJECTS AO WHERE AO.OBJECT_TYPE='PROCEDURE' AND WNER='WARDER') LOOP

p_exportDLL(x.OBJECT_NAME,x.OBJECT_NAME);

END LOOP;

END  p_whole;

/

begin

p_whole;

end;

/

CREATE OR REPLACE DIRECTORY UTL_DIR AS 'D:\WANG';

/

CREATE OR REPLACE PROCEDURE P_EXPORTDLL(P_TABLE_NAME VARCHAR2,P_FILENAME VARCHAR2) IS

BEGIN

DECLARE

L_FILE     UTL_FILE.FILE_TYPE;

L_BUFFER   VARCHAR2(1000);

L_AMOUNT   BINARY_INTEGER := 100;

L_POS      INTEGER := 1;

L_CLOB     CLOB;

L_CLOB_LEN INTEGER;

V_BUFFER VARCHAR2(100);

V_NUM NUMBER;

BEGIN

--获得DDL

SELECT DBMS_METADATA.GET_DDL('PROCEDURE',P_TABLE_NAME,'WARDER' ) INTO L_CLOB FROM DUAL;

--增加存储过程的权限

FOR X IN(SELECT  'EDU' USER_NAME FROM DUAL

UNION

SELECT  'WEBUSER' FROM DUAL

UNION

SELECT  'JSPUSER'FROM DUAL

UNION

SELECT 'GATEWAY'FROM DUAL

UNION

SELECT 'EDUCATE' FROM DUAL)

LOOP

IF DBMS_LOB.INSTR(

DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', X.USER_NAME),

'GRANT EXECUTE ON "WARDER"."'||P_FILENAME||'" TO "'||X.USER_NAME||'"',

1,

1)>0 THEN

V_BUFFER:=chr(10)||'/'||chr(10)||'GRANT EXECUTE ON WARDER.'||P_FILENAME||' TO '||X.USER_NAME||chr(10);

V_NUM:=LENGTH(V_BUFFER);

DBMS_LOB.WRITEAPPEND(L_CLOB,V_NUM,V_BUFFER);

END IF;

END LOOP;

V_BUFFER:='/';

V_NUM:=LENGTH(V_BUFFER);

DBMS_LOB.WRITEAPPEND(L_CLOB,V_NUM,V_BUFFER);

L_CLOB_LEN := DBMS_LOB.GETLENGTH(L_CLOB);

L_FILE     := UTL_FILE.FOPEN('UTL_DIR', P_FILENAME||'.SQL', 'A', 1000);

--写文件

WHILE L_POS < L_CLOB_LEN LOOP

DBMS_LOB.READ(L_CLOB, L_AMOUNT, L_POS, L_BUFFER);

UTL_FILE.PUT(L_FILE, L_BUFFER);

L_POS := L_POS + L_AMOUNT;

END LOOP;

UTL_FILE.FCLOSE(L_FILE);

--IF @@ERROR

END;

END P_EXPORTDLL;

/

CREATE OR REPLACE PROCEDURE P_WHOLE AS

BEGIN

FOR X IN (SELECT OBJECT_NAME FROM ALL_OBJECTS AO WHERE AO.OBJECT_TYPE='PROCEDURE' AND WNER='WARDER') LOOP

P_EXPORTDLL(X.OBJECT_NAME,X.OBJECT_NAME);

END LOOP;

END  P_WHOLE;

/

BEGIN

P_WHOLE;

END;

/

CREATE OR REPLACE DIRECTORY UTL_DIR AS 'D:\WANG';

/

CREATE OR REPLACE PROCEDURE P_EXPORTDLL(P_TABLE_NAME VARCHAR2,--表名

P_FILENAME VARCHAR2,--文件名

P_USER VARCHAR2) IS--用户名

BEGIN

DECLARE

L_FILE     UTL_FILE.FILE_TYPE;

L_BUFFER   VARCHAR2(1000);

L_AMOUNT   BINARY_INTEGER := 100;

L_POS      INTEGER := 1;

L_CLOB     CLOB;

L_CLOB_LEN INTEGER;

V_BUFFER VARCHAR2(100);

V_NUM NUMBER;

BEGIN

--获得DDL

SELECT DBMS_METADATA.GET_DDL('PROCEDURE',P_TABLE_NAME,P_USER ) INTO L_CLOB FROM DUAL;

--增加存储过程的权限

FOR X IN(SELECT  'EDU' USER_NAME FROM DUAL

UNION

SELECT  'WEBUSER' FROM DUAL

UNION

SELECT  'JSPUSER'FROM DUAL

UNION

SELECT 'GATEWAY'FROM DUAL

UNION

SELECT 'EDUCATE' FROM DUAL)

LOOP

IF DBMS_LOB.INSTR(

DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', X.USER_NAME),

'GRANT EXECUTE ON "'||P_USER||'"."'||P_FILENAME||'" TO "'||X.USER_NAME||'"',

1,

1)>0 THEN

V_BUFFER:=CHR(10)||'/'||CHR(10)||'GRANT EXECUTE ON '||P_USER||'.'||P_FILENAME||' TO '||X.USER_NAME||CHR(10);

V_NUM:=LENGTH(V_BUFFER);

DBMS_LOB.WRITEAPPEND(L_CLOB,V_NUM,V_BUFFER);

END IF;

END LOOP;

--权限后边加上/

V_BUFFER:='/';

V_NUM:=LENGTH(V_BUFFER);

DBMS_LOB.WRITEAPPEND(L_CLOB,V_NUM,V_BUFFER);

L_CLOB_LEN := DBMS_LOB.GETLENGTH(L_CLOB);

L_FILE     := UTL_FILE.FOPEN('UTL_DIR', P_FILENAME||'.SQL', 'A', 1000);

--写文件

WHILE L_POS < L_CLOB_LEN LOOP

DBMS_LOB.READ(L_CLOB, L_AMOUNT, L_POS, L_BUFFER);

UTL_FILE.PUT(L_FILE, L_BUFFER);

L_POS := L_POS + L_AMOUNT;

END LOOP;

UTL_FILE.FCLOSE(L_FILE);

END;

END P_EXPORTDLL;

/

DECLARE

V_USER VARCHAR2(30):='WARDER';--查询WARDER下的对象

BEGIN

FOR X IN (SELECT OBJECT_NAME FROM ALL_OBJECTS AO WHERE AO.OBJECT_TYPE='PROCEDURE' AND WNER=V_USER) LOOP

P_EXPORTDLL(X.OBJECT_NAME,X.OBJECT_NAME,V_USER);

END LOOP;

END  P_WHOLE;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值