名站网址导航为大家提供关于数据库教程相关的教程网站知识。
Oracle对于死锁的处理具体相关方法
Oracle网站数据库出现死锁的时候可以按照以下处理步骤加以解决:,第一步:尝试在sqlplus中通过sql开始执行命令进行删除,假如如果能够删除成功,则万事大吉!但通常情况下,出现死锁时,想通过开始执行命令行或者通过Oracle的管理相关工具删除有死锁的session,oracle只会将该,Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0 Connected as quik SQL> select xidusn, obj,第二步:进入操作办法系统进行删除进程,本示例的操作办法系统是IBM aix。,Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp. C:\Documents and Settings\Admi,login: root --录入用户名 root's Password: --录入密码 ********************************************************
虽说Oracle的动态SQL数据库语句使用起来确实很方便,但是其拼装过程却太麻烦。尤其在拼装数据库语句中涉及到date类型字段时,拼装时要加to_char先转换成字符,到了sql中又要使用to_date转成date类型和原字段再比较。
例如有这样一个SQL数据库语句:
select '========= and (t.created>=to_date('''||to_char(sysdate,'yyyy-mm-dd')||''',''yyyy-mm-dd'') AND t.created< to_date('''||to_char(sysdate 1,'yyyy-mm-dd')||''',''yyyy-mm-dd''))' from dual;
它就是将sysdate转成字符串,再在生成的SQL中将字符串转换成date。
其拼装出来的结果如下:
========= and (t.created>=to_date('2012-11-08','yyyy-mm-dd') AND t.created< to_date('2012-11-09','yyyy-mm-dd'))
字符串2012-11-08是咱们使用to_char(sysdate,'yyyy-mm-dd')生成的,数据库语句中涉及到的每一个单引号,都要写成两个单引号来转义。
虽然拼装过程很烦人,但只要掌握好三点,就应能拼装出能用的SQL数据库语句。
一、先确定目标。应保证拼装出来的SQL应该是什么样子,然后再去配置那个动态SQL
二、拼装SQL的时候,所有使用连接符||连接的对象都应是varchar2类型,这种类型的对象以单引号开头,以单引号结尾。数字会自动转,但date需要咱们手工使用to_char函数转。
三、遇到有引号的,就写成两个单引号。
如 ' I am a SQL developer '' '||v_name||' '' in China. telephone is '||v_number||' .'
v_name是字符型的,所以拼装它是需要前后加单引号。
这种转换很烦人,但从10g开始有一个新功能,可以让人不用这么烦。它就是q'[xxxxx]'
示例如下:
select q'[ I'm a SQL developer ' ]'||to_char(sysdate,'yyyy')||q'[' in China. telephone is ]'||1990||'.' from dual;
结果如下:
I'm a SQL developer '2012' in China. telephone is 1990.
I'm使用一个单引号在q'[]'中就可以。
to_char(sysdate,'yyyy')转成的是2012,前后是要加单引号的。所以在q'[xxx ']'的结尾加了一个单引号。
这样就使得咱们不用想以前那样使用 ''''表示一个单引号了。
简而言之,掌握这三点,就应该能拼装出能用的SQL。至于假如如果使用绑定变量输入输出,则需要使用into using关键字。
set serveroutput on; declare incoming date:=sysdate-10; outgoing int; begin execute immediate 'select COUNT(*) FROM user_objects where created > :incoming' into outgoing using incoming ; dbms_output.put_line(' count is: ' || outgoing); end;
使用using的好处,就是不用去转date类型为varchar类型,再转回去date类型这种繁琐的操作办法。
SQL具体相关代码如下:
declare incoming date:=sysdate-10; outgoing int; begin execute immediate 'insert into t_object(a) select COUNT(*) FROM user_objects where created > :incoming' into outgoing using incoming ; dbms_output.put_line(' count is: ' || outgoing); end;
ORA-01007: 变量不在选择列表中
ORA-06512: 在 line 6
tom这样解释这个错误:Followup November 24, 2004 - 7am Central time zone:
you have to use DBMS_SQL when the number of outputs is not known until run time.
Sql具体相关代码如下:
declare v_cursor number; --定义游标 v_string varchar2(2999); v_row number; begin v_string := 'insert into t_object(a) select COUNT(*) FROM user_objects where created > :incoming';--操作办法数据库语句,其中:name是数据库语句运行时才确定值的变量 v_cursor:=dbms_sql.open_cursor;--打开处理游标 dbms_sql.parse(v_cursor,v_string,dbms_sql.native);--解释数据库语句 dbms_sql.bind_variable(v_cursor,':incoming',sysdate-30); --给变量赋值 v_row := dbms_sql.execute(v_cursor);--执行数据库语句 dbms_sql.close_cursor(v_cursor);--关闭游标 --dbms_output.put_line(v_row); commit; exception when others then dbms_sql.close_cursor(v_cursor); --关闭游标 rollback; end;
关于数据库教程相关的教程网站知识今天我们就说到这里了,希望可以帮到大家。