ORACLE使用中的常见、实用的问题
来源:互联网 发布:linux历史命令文件 编辑:程序博客网 时间:2024/05/17 23:50
摘要:这是原来用ORACLE的过程中记录下的一些问题,现在翻出来看看,还比较实用,如果以后再次遇到这样的问题的时候,就不用东找西找资料了。
里面包括字段同步问题,单引号问题, EXECUTE IMMEDIATE的使用問題,replace使用問題,數據庫中字段為字符型時生成SQL語句的問題。
1、 同步表记录问题
有两张表t1,t2,有一个相同的字段,passwd,我想在更新t1表的passwd字段时同时更新t2的passwd字段,让他们保存一致,同样,在更新t2的passwd的时候同时更新t1的passwd.我分别做了两个触发器.单独对于某张表是可以的.但是同时启用两个触发器就会产生变异.
我想也对.这样不就是死循环了吗?请问怎样实现这样的功能.让两个字段保持一致。
解決:没用解决
2、單引號問題:
這條語句 可以工作正常。
這條語句 工作不正常。
但是我的過程中又需要動態生成SQL語句,如
只能得到工作不正常的語句。
注:thcur.cno為用cursor取得的字段名。
這里我試了是不能夠這么寫的:
它不像在JAVA程序中,在JAVA程序中就好辦,因為它是以雙引號為包含。
請問這里怎么寫才能夠得到上面可以正常工作的語句
解決:
3、 EXECUTE IMMEDIATE的使用問題
這是一條根據條件動態生成的SQL語句(無錯):
使用下面的這樣執行會出錯:
報錯:
ORA-00917: missing comma
但是我檢測絕對沒有少。不知道是什么地方出錯,還是DML語句不可以這樣使用。但是從不少資料看都可以這樣使用的,后來實在沒法,到CSDN上一搜,在這里找到一篇文章: http://blog.csdn.net/zhujjcn/archive/2005/02/04/280749.aspx
有心得,就用下面這種方式把問題解決了:
注: 根據我的理解,其中的數字表示的是字段的該中的位置。
4、 replace使用問題
我在匿名塊中這樣使用:
可是去給我報以這樣的錯誤
8:51:44 PLS-00221: 'REPLACE' is not a procedure or is undefined
明明是有這個函數為什么會出現這種情況呢,真的讓我頭痛。
我試了一下這樣:
正常運行,呵呵。
5、數據庫中字段為字符型時生成SQL語句的問題
在任何一種高級語言中,如果要操作表中字段是字符型的,那么就一定要在該字兩邊加上單引號,這一點也是我們很多人都會去注意的。所以,給了我一種心理,就是在所有的操作字符類型的時候都要加上單引號。
但是在ORACLE的游標中就不用(肯定還有其它的情況,我沒有遇上)
如下面這個復雜的游標:
剛開始的時候,我把這里寫成這樣:
and cno=''''||paraCNO||''''
讓我可忙活了半天,我運行的時候,不是這樣報錯,他出現在錯誤去在該游標的上面几行,說一個定義錯誤,但是這明明是正確的。沒法,我只得新建一個文件,一行一行的去試,才把這個問題找出來。
里面包括字段同步问题,单引号问题, EXECUTE IMMEDIATE的使用問題,replace使用問題,數據庫中字段為字符型時生成SQL語句的問題。
1、 同步表记录问题
有两张表t1,t2,有一个相同的字段,passwd,我想在更新t1表的passwd字段时同时更新t2的passwd字段,让他们保存一致,同样,在更新t2的passwd的时候同时更新t1的passwd.我分别做了两个触发器.单独对于某张表是可以的.但是同时启用两个触发器就会产生变异.
我想也对.这样不就是死循环了吗?请问怎样实现这样的功能.让两个字段保持一致。
解決:没用解决
2、單引號問題:
這條語句
- select * from prd_flow_bak where cno='FT0302';
這條語句
- select * from prd_flow_bak where cno=FT0302;
但是我的過程中又需要動態生成SQL語句,如
- sql1:='select * from prd_flow_bak where cno='||thcur.cno;
注:thcur.cno為用cursor取得的字段名。
這里我試了是不能夠這么寫的:
- sql1:='select * from prd_flow_bak where cno=''||thcur.cno||''';
請問這里怎么寫才能夠得到上面可以正常工作的語句
解決:
- sql1:='select * from prd_flow_bak where cno='||''''||thcur.cno||'''';
3、 EXECUTE IMMEDIATE的使用問題
這是一條根據條件動態生成的SQL語句(無錯):
- insertSQL:='insert into Customer2To3_M values(';
- insertSQL:=insertSQL||''''||currentCNO||''''||',';
- insertSQL:=insertSQL||to_date(to_char(dateIntBegin),'YYYYMMDD')||',';
- insertSQL:=insertSQL||''''||''''||','||avgSalaryOfThisDay;
- insertSQL:=insertSQL||','||''''||to_char(to_date(to_char(dateIntBegin),'YYYYMMDD'),'Day')||''''||')';
- execute immediate insertSQL;
ORA-00917: missing comma
但是我檢測絕對沒有少。不知道是什么地方出錯,還是DML語句不可以這樣使用。但是從不少資料看都可以這樣使用的,后來實在沒法,到CSDN上一搜,在這里找到一篇文章: http://blog.csdn.net/zhujjcn/archive/2005/02/04/280749.aspx
有心得,就用下面這種方式把問題解決了:
- execute immediate 'insert into Customer2To3_M values(:1,:2,:3,:4,:5)'
- using currentCNO,to_date(to_char(dateInt),'YYYYMMDD'),totalORDNO,avgSalaryOfThisDay,to_char(to_date(to_char(dateInt),'YYYYMMDD'),'Day');
4、 replace使用問題
我在匿名塊中這樣使用:
- replace(insertSQL,'kkk','ttt');
8:51:44 PLS-00221: 'REPLACE' is not a procedure or is undefined
明明是有這個函數為什么會出現這種情況呢,真的讓我頭痛。
我試了一下這樣:
- insertSQL:=replace(insertSQL,'kkk','ttt');
5、數據庫中字段為字符型時生成SQL語句的問題
在任何一種高級語言中,如果要操作表中字段是字符型的,那么就一定要在該字兩邊加上單引號,這一點也是我們很多人都會去注意的。所以,給了我一種心理,就是在所有的操作字符類型的時候都要加上單引號。
但是在ORACLE的游標中就不用(肯定還有其它的情況,我沒有遇上)
如下面這個復雜的游標:
- cursor c1(startDateOfThisMonth in varchar2,endDateOfThisMonth in varchar2,nowDateOfThisMonth in varchar2,paraCNO in varchar2)
- is
- select ordno,pro_fr,pro_to,QTY,CNO from prd_flow_bak
- where pro_fr>=to_date(startDateOfThisMonth,'YYYYMMDD')
- and pro_to<to_date(endDateOfThisMonth,'YYYYMMDD')
- and cno=paraCNO --就是這里,在表中為字符型
- and (to_date(nowDateOfThisMonth,'YYYYMMDD') between pro_fr and pro_to);
and cno=''''||paraCNO||''''
讓我可忙活了半天,我運行的時候,不是這樣報錯,他出現在錯誤去在該游標的上面几行,說一個定義錯誤,但是這明明是正確的。沒法,我只得新建一個文件,一行一行的去試,才把這個問題找出來。
- ORACLE使用中的常见、实用的问题
- ORACLE使用中的常见、实用的问题
- ORACLE使用中的常见、实用的问题
- ORACLE使用中的常见、实用的问题
- ORACLE使用中的常见、实用的问题
- 宏使用中的常见的基础问题
- 宏使用中的常见的基础问题
- Jlink在使用的过程中的一些实用问题
- Jlink在使用的过程中的一些实用问题
- oracle的plsql使用中常见的问题整理
- oracle中的merge命令的简单实用
- oracle常见的登录问题
- oracle数据库常见的问题
- Oracle常见实用的函数总结(更新...)
- 实用的CSS常见的问题和技巧总结
- 常见的工作中的问题
- CocoaPods 的常见使用问题
- oracle新手常见的问题及解决办法
- MSMQ,Enterprise Service, DotNet Remoting,Web Service 的优缺点
- AFTER DELETE Trigger
- Oracle中常见数据类型转换
- DHC log 2009-2-21
- PL/SQL学习笔记一
- ORACLE使用中的常见、实用的问题
- 在Oracle数据库中,用于数据备份的触发器及表结构
- 几个关于正确及错误PL/SQL对照使用的示例
- Oracle、SQL Server、Access利用SQL语句进行高效果分页
- 利用cursor及fetch将一个表中符合条件的记录拷贝到另一个表中
- LoadString的使用
- Oracle中利用一个表结构拷贝成另外的表
- 数据库设计三大范式应用实例剖析(讲得比较清楚)
- PL/SQL入门