对于游标进于update(行锁)的操作实验
/*
declare
x number;
mc varchar();
cursor findtest is select idmyname from testtable FOR UPDATE;
begin
open findtest;
fetch findtest into xmc;
UPDATE testtable SET myname =myid WHERE CURRENT OF findtest;
DBMS_OUTPUTPUT_LINE(SQL%ROWCOUNT);
close findtest;
update testtable set myname=ss where id>;
DBMS_OUTPUTPUT_LINE(更新了||SQL%ROWCOUNT||条数据);
end;
*/
/
create or replace procedure debugout(mydir varcharmyfile varcharmyinfo varchar) as
进行文件写的存储过程调用方式 debugout(目录名文件名字符串)
注意:oracel对于plsql的文件操作默认是不能对文件进行操作的所以按下列步骤进行设定
关闭数据库修改initsidora文件在文件中增加utl_file_dir参数其值为目录名
例如对于windows c: c:\xx unix 为/tmp /tmp/xx
检查目录的文件系统确定oracle用户是否有关于该文件路径的读写权限若不具有则通过chmod filepath
再启动数据库这样存储过程就能够正常的生成和读取文件了
V_NewLine varchar();
v_FileHand UTL_FILEFILE_TYPE; 文件句柄
begin
v_FileHand:=UTL_FILEFOPEN(mydirmyfilea);
w 为写 r为读 a添加(文件不存在自生成)
UTL_FILEPUT_LINE(v_FileHandto_char(sysdateyyyymmdd hh:mi:ss ) || myinfo);
UTL_FILEFCLOSE(v_FileHand);
exception
when UTL_FILEINVALID_OPERATION then
raise_application_error(文件不能打开);
when UTL_FILEINVALID_FILEHANDLE then
raise_application_error(文件句柄不是打开的文件);
when UTL_FILEWRITE_ERROR then
raise_application_error(写操作失败);
when UTL_FILEINVALID_PATH then
raise_application_error(文件或目录写操作失败);
end;
/
可以执行DDL及DML语句的存储过程
CREATE OR REPLACE PROCEDURE PEXESQL(s varchar) as
i integer;
r integer;
begin
可以执行insertupdatedelete(事物不提交)
如果是create table等命令要明文授于系统权限对于drop table不用
i:=dbms_sqlopen_cursor;
dbms_sqlparse(isdbms_sqlv);
r:=dbms_sqlexecute(i);
commit;
dbms_sqlclose_cursor(i);
exception when others then
dbms_outputput_line(系统出了错);
if dbms_sqlis_open(i) then
dbms_sqlclose_cursor(i);
end if;
raise输出详细出错信息
raise;
dbms_outputput_line(系统出了错了SQLCODE=||sqlcode|| sqlerrm=||sqlerrm);
end;
/*
p不能安ORACEL的问题
原因
Any platform that uses the Intel Pentium processor with the
Sun JRE and Symmantec JIT will encounter this problem Windows NT
Windows and NetWare platforms are confirmed to be affected
解决办法
建个临时目录将oracle安装盘拷贝到该目录中
在该目录中搜索symcjitdll (我找到了两个)
将symcjitdll改名为symcjitold
运行\install\win目录下的setupexe 就应该可以了
*/