没说清楚,你是在怎样的环境使用ORACLE,是SQL*Plus,还是在程序里,还是用SQL脚本,还是...
创新互联成立十载来,这条路我们正越走越好,积累了技术与客户资源,形成了良好的口碑。为客户提供成都网站设计、网站制作、外贸营销网站建设、网站策划、网页设计、域名注册、网络营销、VI设计、网站改版、漏洞修补等服务。网站是否美观、功能强大、用户体验好、性价比高、打开快等等,这些对于网站建设都非常重要,创新互联通过对建站技术性的掌握、对创意设计的研究为客户提供一站式互联网解决方案,携手广大客户,共同发展进步。
用固定的语法结构写。
简单来说,就是你一个存储过程当中创建了一个表table_a,然后要用insert into将其他的数据插入到这个table_a当中,但是因为你在创建过程的时候 table_a还不存在,过程就会显示有编译错误。
因为table_a不存在必然导致过程无法执行,所以无法编译成功,而把insert into语句加如到execute immediate之后,则oracle不会再去理会这个对象是否存在,因此可以成功编译和执行。
在sqlplus和PL/SQL DEV中可以用或者定义变量,详细说明如下:
(1) :“变量名”eg:name;
生命周期:单次引用中,不需要声明,如果替换字符或日期类型,最好用单引号扩起
使用范围:where、order by、列表达式、表名、整个SELECT 语句中
(2) :“变量名”eg:name;
生命周期:整个会话(session连接),不需要声明
(3)define :“define 变量名=变量值”eg:DEFINE a = clark;
生命周期:整个会话,预先声明,使用时用引用声明的变量
define variable=用户创建的CHAR类型的值:define 变量名=值;
define column_name(变量名):查看变量命令。
undefine 变量名:清除变量
define:查看在当前会话中所有的替换变量和它们的值
1、创建测试表,
create table test_val(id varchar2(20),remark varchar2(20));
2、插入测试数据;
insert into test_val select level, 'lvl_'||level remark from dual connect by level=100;
commit;
3、编写语句,将表中的记录数赋值给变量;
declare
v_int number;
begin
execute immediate 'select count(*) from test_val' into v_int;
end;
4、将变量值打印,查看结果;
dbms_output.put_line(v_int);
查看Oracle SQL绑定变量方法如下:
alter session set nls_date_format = 'yyyy-mm-dd,hh24:mi:ss';
set linesize 400
col sql_Id format a20
col name format a20
col datatype_string format a14
col value_string format a20
--这个sql从内存中读取绑定变量值信息,若是不在内存中,则使用下一个sql
select
sql_id,name, datatype_string, last_captured,value_string from
v$sql_bind_capture where sql_id='dxfcacn4t4ppw' order by
LAST_CAPTURED,POSITION;
--这个sql从awr中读取绑定变量值信息
select
instance_number, sql_id,name, datatype_string,
last_captured,value_string from dba_hist_sqlbind where
sql_id='fahv8x6ngrb50'order by LAST_CAPTURED,POSITION;