--1---
--对于游标进于update(行锁)的操作实验
/*
declare
x number;
mc varchar(20);
cursor findtest is select id,myname from testtable FOR UPDATE;
begin
open findtest;
fetch findtest into x,mc;
UPDATE testtable SET myname ='myid' WHERE CURRENT OF findtest;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
close findtest;
--update testtable set myname='ss' where id9;
--DBMS_OUTPUT.PUT_LINE('更新了'||SQL%ROWCOUNT||'条数据');
end;
*/
/
--2---
create or replace procedure debugout(mydir varchar,myfile varchar,myinfo varchar) as
--进行文件写的存储过程,调用方式 debugout(目录名,文件名,字符串)
--注意:oracel对于plsql的文件操作默认是不能对文件进行操作的.所以按下列步骤进行设定。
--关闭数据库修改initsid.ora文件,在文件中增加utl_file_dir参数,其值为目录名
--例如对于windows c: c:\xx unix 为/tmp /tmp/xx
--检查目录的文件系统,确定oracle用户是否有关于该文件路径的读写权限,若不具有,则通过chmod 766 filepath
--再启动数据库。这样,存储过程就能够正常的生成和读取文件了。
V_NewLine varchar(100);
v_FileHand UTL_FILE.FILE_TYPE; --文件句柄
begin
v_FileHand:=UTL_FILE.FOPEN(mydir,myfile,'a');
--w 为写 r为读 a添加(文件不存在,自生成)
UTL_FILE.PUT_LINE(v_FileHand,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss ') || myinfo);
UTL_FILE.FCLOSE(v_FileHand);
exception
when UTL_FILE.INVALID_OPERATION then
raise_application_error(-20102,'文件不能打开');
when UTL_FILE.INVALID_FILEHANDLE then
raise_application_error(-20103,'文件句柄不是打开的文件');
when UTL_FILE.WRITE_ERROR then
raise_application_error(-20105,'写操作失败');
when UTL_FILE.INVALID_PATH then
raise_application_error(-20106,'文件或目录写操作失败');
end;
/
--3--
--可以执行DDL及DML语句的存储过程
CREATE OR REPLACE PROCEDURE PEXESQL(s1 varchar2) as
i integer;
r integer;
begin
--可以执行insert,update,delete(事物不提交)
--如果是create table等命令要明文授于系统权限,对于drop table不用
i:=dbms_sql.open_cursor;
dbms_sql.parse(i,s1,dbms_sql.v7);
r:=dbms_sql.execute(i);
--commit;
dbms_sql.close_cursor(i);
exception when others then
-- dbms_output.put_line('系统出了错');
if dbms_sql.is_open(i) then
dbms_sql.close_cursor(i);
end if;
--raise输出详细出错信息
-- raise;
dbms_output.put_line('系统出了错了,SQLCODE='||sqlcode||' sqlerrm='||sqlerrm);
end;
/*
p4不能安ORACEL的问题
原因:
Any platform that uses the Intel Pentium 4 processor, with the
Sun JRE and Symmantec JIT will encounter this problem. Windows NT,
Windows 2000 and NetWare platforms are confirmed to be affected.
解决办法
1. 建个临时目录,将oracle安装盘拷贝到该目录中
2.在该目录中搜索symcjit.dll (我找到了两个)
3.
4. 将symcjit.dll改名为symcjit.old.
5. 运行\install\win32目录下的setup.exe 就应该可以了
*/