绑定变量及其优缺点

发表于:2012-2-21 10:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:robinson_0612    来源:51Testing软件测试网采编

  3、在存储过程或包中使用绑定变量

  1. -->存储过程和保重,对参数的传递即是使用自动绑定变量来实现,因此编程人员无须操心绑定变量问题,如下例所示:                
  2. SQL> create or replace procedure ins_t(p_id in number,p_value in number) -->创建一个过程用于向表t插入记录                
  3.   2  as                                                                                                                 
  4.   3    begin                                                                                                            
  5.   4      insert into t values(p_id,p_value);                                                                            
  6.   5      commit;                                                                                                        
  7.   6    end;                                                                                                             
  8.   7  /                                                                                                                  
  9.                                                                                                                         
  10. Procedure created.                                                                                                      
  11.                                                                                                                         
  12. SQL> select sid,serial# from v$session where username='SCOTT';  -->获得当前用户的sid,serial#                             
  13.                                                                                                                         
  14.        SID    SERIAL#                                                                                                   
  15. ---------- ----------                                                                                                    
  16.       1084        938                                                                                                   
  17.                                                                                                                         
  18. SQL> exec dbms_monitor.session_trace_enable(session_id=>1084,serial_num=>938);  -->对当前的session启用跟踪               
  19.                                                                                                                         
  20. PL/SQL procedure successfully completed.                                                                                
  21.                                                                                                                         
  22. SQL> exec ins_t(31,62);               -->执行存储过程                                                                    
  23.                                                                                                                         
  24. PL/SQL procedure successfully completed.                                                                                
  25.                                                                                                                         
  26. SQL> exec ins_t(32,64);                                                                                                 
  27.                                                                                                                         
  28. PL/SQL procedure successfully completed.                                                                                
  29.                                                                                                                         
  30. SQL> exec dbms_monitor.session_trace_disable(session_id=>1084,serial_num=>938); -->关闭对session的跟踪                   
  31.                                                                                                                         
  32. PL/SQL procedure successfully completed.                                                                                
  33.                                                                                                                         
  34. SQL> SET LINESIZE 180                                                                                                   
  35. SQL> COLUMN trace_file FORMAT A100                                                                                      
  36. SQL> SELECT s.sid,                   -->获得跟踪文件位置                                                                 
  37.   2  s.serial#,                                                                                                         
  38.   3  p.spid,                                                                                                            
  39.   4  pa.value || '/' || LOWER(SYS_CONTEXT('userenv','instance_name')) ||                                                
  40.   5  '_ora_' || p.spid || '.trc' AS trace_file                                                                          
  41.   6  FROM v$session s,                                                                                                  
  42.   7  v$process p,                                                                                                       
  43.   8  v$parameter pa                                                                                                     
  44.   9  WHERE pa.name = 'user_dump_dest'                                                                                   
  45.  10  AND s.paddr = p.addr                                                                                               
  46.  11  AND s.audsid = SYS_CONTEXT('USERENV''SESSIONID');                                                                
  47.                                                                                                                         
  48.        SID    SERIAL# SPID         TRACE_FILE                                                                           
  49. ---------- ---------- ------------ --------------------------------------------------------------                        
  50.       1084        938 10883        /u02/database/CNMMBO/udump/cnmmbo_ora_10883.trc                                      
  51.                                                                                                                         
  52. SQL> SQL>                                                                                                               
  53. SQL> ho pwd                                                                                                             
  54. /users/oracle                                                                                                           
  55.                                                                                                                         
  56. -->使用tkprof工具格式化跟踪文件便于阅读                                                                                  
  57. SQL> ho tkprof /u02/database/CNMMBO/udump/cnmmbo_ora_10883.trc /users/oracle/ins_t.txt explain=goex_admin/goex_admin    
  58.                                                                                                                         
  59. TKPROF: Release 10.2.0.3.0 - Production on Fri Sep 9 12:55:18 2011                                                      
  60.                                                                                                                         
  61. Copyright (c) 1982, 2005, Oracle.  All rights reserved.                                                                 
  62.                                                                                                                         
  63. SQL> ho cat /users/oracle/ins_t.txt  -->查看跟踪文件                                                                     
  64. ......                                                                                                                  
  65. BEGIN ins_t(31,62); END;                                                                                                
  66. ......                                                                                                                  
  67. INSERT INTO T      -->可以看到insert into语句中使用了绑定变量                                                            
  68. VALUES                                                                                                                  
  69. (:B2 ,:B1 )                                                                                                             
  70.                                                                                                                         
  71. call     count       cpu    elapsed       disk      query    current        rows                                        
  72. ------- ------  -------- ---------- ---------- ---------- ----------  ----------                                         
  73. Parse        0      0.00       0.00          0          0          0           0                                        
  74. Execute      2      0.11       0.11          2        281         27           2                                        
  75. .......

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号