随笔分类 - Oracle PL/SQL
摘要:DBMS_LOB包的使用1、dbms_lob.append(dest_lob IN OUT NOCOPY BLOB, src_lob IN BLOB) dbms_lob.append(dest_lob IN OUT NOCOPY CLOB CHARACTER SET ANY_CS, src_lob IN CLOB CHRACTER SET dest_lob%CHARSET); 将源LOB变量的内容添加到目标LOB变量的尾部。 示例:dest_lob clob; src_lob clob; dbms_lob.app...
阅读全文
摘要:DBMS_UTILITY.FORMAT_ERROR_BACKTRACE系统为最近一次生成的异常设置了一个栈,并跟踪它的传递过程,而这个函数使用这个栈,然后返回该异常的整个传递过程。这个函数对错误的定位和实施下一步处理起着至关重要的作用。例如:CREATE OR REPLACE PROCEDURE procl ISBEGIN dbms_output.put_line('running proc1'); RAISE no_data_found;END;/CREATE OR REPLACE PROCEDURE proc2 ISBEGIN dbms_output.put_line(&#
阅读全文
摘要:Oracle中一般将自增sequence重置为初始1时,都是删除再重建,这种方式有很多弊端,依赖它的函数和存储过程将失效,需要重新编译。不过还有种巧妙的方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改为负的这个值(反过来走),然后再改回来。假设需要修改的序列名:seq_name1、select seq_name.nextval from dual; //假设得到结果56562、 alter sequence seq_name increment by -5655; //注意是-(n-1)3、select seq_name.nextval from dual;
阅读全文
摘要:PRAGMA AUTONOMOUS_TRANSACTION在你的一个事务(外层事务)中可以定义一个或几个自治事务。自治事务可以独立commit,不对外层事务产生影响,同样外层事务的 rollback 也对自治事务没有影响。通常可以考虑将自治事务定义成一个过程,在外层的事务中调用。即当前的存储过程作为已有事务的子事务运行,子事务的commit,rollback操作不影响父事务的状态应用于(1)匿名块(2)触发器(3)存储过程例子:PROCEDURE addrowautonomous(pid IN tlog.id%TYPE, plda...
阅读全文
摘要:需求:实现供应商的接口导入: 导入供应商、供应商地址和供应商联系人的信息。 定义变量:--提交标准并发请求时的参数 l_request_id1 NUMBER; l_request_id2 NUMBER; l_request_id3 NUMBER; l_request_id4 NUMBER; l_bl_result1 BOOLEAN; l_bl_result2 BOOLEAN; l_bl_result3 BOOLEAN; 调用标准的请求,将三个接口表中的数据导入到系统中。 实现sql如下:IF v_supplier_error_flag = 'N' AND v_supplier_
阅读全文
摘要:首先一点,如果只是select 的话,Oracle是不会加任何锁的,也就是Oracle对 select 读到的数据不会有任何限制。虽然这时候有可能另外一个进程正在修改表中的数据,并且修改的结果可能影响到你目前select语句的结果,但是因为没有锁,所以select结果为当前时刻表中记录的状态。如果加入了for update, 则Oracle一旦发现(符合查询条件的)这批数据正在被修改,则不会发出该select语句查询,直到数据被修改结束(被commit),马上自动执行这个select语句。同样,如果该查询语句发出后,有人需要修改这批数据(中的一条或几条),它也必须等到查询结束后(commit)
阅读全文
摘要:有两个简单例子,以说明 "exists"和"in"的效率问题1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ; T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。2) select * from T1 where T1.a in (select T2.a from T2) ; T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。exists 用法:第(1)句理解其含义:其中 “select 1 from
阅读全文
摘要:PL/SQL程序包点击'Test'单步调试,点击'Start debugger'时,弹出信息框"Debugging requires Debug connect session system priviledges'。 此时需要用sys/system用户赋予开发用户debugger权限: grant debug any procedure to username grant debug connect session to username
阅读全文
摘要:在Oracle中对用户管理是使用权限的方式来管理。也就是说,我们想使用数据库,就必须的有权限。但是如果别人将权限授予我们,我们也能对数据库进行操作,但是我们必须要在已授权的表前键入该表owner的名称,所以这样就比较麻烦。Oracle 提供了同义词管理的功能,Oracle同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。语法:create synonym 名字 for 所有者.对象名create synonym synonym_name for [owner].object_name作用:1.简化了SQL语句2.提供了对象的公共访问3.隐藏对象的名称和所有者4...
阅读全文
摘要:在数据开发应用中,很多时候需要对数据进行排序,但是在Oracle 数据库中,有空值一说(NULL)。如果一个列中有的值是空的,则如果对此列进行排序的话,空值的行将被排序放到后面,如我对HR模式下的EMPLOYEES员工表按照佣金比率列进行排序的话,SELECT t.employee_id, t.last_name, t.commission_pctFROM employees tWHERE t.employee_id BETWEEN 178 AND 181ORDER BY t.commission_pct结果如下:179 Johnson 0.10178 Grant 0.15180 Taylor
阅读全文