知识小结(PL/SQL)
来源:互联网 发布:apache 报错 编辑:程序博客网 时间:2024/05/01 17:46
1) 时间转换函数中如果有时间变量yyyy-mm-dd两边需两''
to_date(''' || to_char(a_valid_date_end, 'yyyy-mm-dd') ||''', ''yyyy-mm-dd'')
2) select distinct(e.itemnum) bulk collect into v_itemnum
将字符串数组以分隔符分隔的字符串调用
pkg_maximo_common.get_string(v_itemnum, ',', '')
3) union只是将两个结果联结起来一起显示,并不是联结两个表并成一个新表.
4) 判断tbl_cad表是否有数据用where exists (select null from tbl_cad where c_id = cei_id)
5)当判断某一表中是够存在符合某一集合的一个值时使用下列语句:
for v_row in c_cursor loop
select count(*) into v_count from tmp_wrong_work_order where twwo_tmp_work_order = v_row.two_id;
6)函数substr(str,1,M)返回字符串str中从一开始的M长的字符串。
7)定义游标在过程名后面,并且可以附语句给cursor。
8)当需要连接两个表相同记录到一个表中时,用符号 连接(+)。
9)当需要只取一个选择集的一条记录,或者小于等于某条记录时,在选择语句后添加rownum.
10)把选择出来的几条记录存入一个数组时用bulk collect into.
11)考虑时间变量为空,并且与其他时间变量比较大小时不能用nvl()函数
12)LPAD(str,n,'0')如果字符串str不足n位,则在前面填充字符'0'。
13)select seq_work_plan_version.currval into v_version_id from dual
选择序列标记的当前最大值为变量v_version_id,dual是作为只选择一条记录。
14)select record_name bulk collect into record_array from table
选择表(table)中的字段(record_name)的记录成批的进入集合变量(record_array)中
15)if record_array.count > 0 then
forall v_index in record_array.first..record_array.last
按照集合(record_array)的顺序来处理集合(record_array)。
16)rownum并不一定是按照顺序排序的,有可能出现不排序的。
17)遍历数据集
FOR x IN (SELECT /*+ ALL_ROWS */ clm.CLM_BLL_NO,
MAX(TO_NUMBER(NVL(cld.CLD_FTR_PDT, '0'))) AS GDF
FROM CorrectionListMaster clm,
CorrectionListDetail cld
WHERE clm.CLM_ID = cld.CLM_ID
AND clm.CLM_CRT_RSN IS NULL
AND clm.CLM_ADT = p_PRT
AND clm.CLM_ST = 0
AND cld.CLD_NM = '改单费'
GROUP BY clm.CLM_BLL_NO)
LOOP
IF x.GDF = 0 THEN
l_SQL := 'UPDATE CorrectionListMaster clm '
|| 'SET clM.CLM_CHK = 0 '
|| 'WHERE clm.CLM_BLL_NO = :BLL_NO '
|| 'AND clm.CLM_ADT = :PRT '
|| 'AND clm.CLM_ST = 0';
EXECUTE IMMEDIATE l_SQL
USING x.CLM_BLL_NO, p_PRT;
l_SQL := 'INSERT INTO CorrectionListErrMsg '
|| 'VALUES(s_CorrectionListErrMsg_ID.NEXTVAL, '
|| '''运单号'' || :BLL_NO || ''更正原因为空,改单费不能为0!'', '
|| ':PRT)';
EXECUTE IMMEDIATE l_SQL
USING x.CLM_BLL_NO, p_PRT;
END IF;
END LOOP;
18).net调用oracle存储过程在返回dataset的时候字段名都是大写了,而javascript是大小写敏感的
19)跟踪sql
select * from v$session where Module='预配自动导入系统.exe'
select * from v$sqlarea where address =
( select sql_address from v$session where sid = 991 );
20) select max(ss.beginday) aa from nqexelog t,shipsailstateh ss,(select shipvoyage,voytype ';
from nq_shipdate_all group by shipvoyage,voytype) mm where rownum=1 and mm.shipvoyage=ss.shipvoyage;
rownum=1是取group by之前的第一条数据,而不是group by之后的第一条.
21)pl/sql看执行计划
explain plan for [你的sql语句]
比如: explain plan for select * from table1
然后 执行:select * from table(DBMS_XPLAN.DISPLAY)就可以看到它的执行计划了。
22)奇怪的SQL
在sql server中:
这两条语句的返回值都为OK
但是,在oracle中:
前面返回no,后面返回值为ok
解决:
(PL/SQL)null 或者''不能与任何值比较,只能用 is null或 is not null判断
23)rank()over(partition by
--加partition by 每个分区内重新从开始排名
SELECT ROW_NUMBER() over(partition by [type] order by col) id,* FROM TB
id col type
1 1 A
2 2 A
3 2 A
4 3 A
5 4 A
6 4 A
1 1 B
2 2 B
3 3 B
4 3 B
5 5 B
24)随机生成几位字符
--取得随机数的视图CREATE VIEW v_RANDASSELECT re=STUFF(RAND(),1,2,'')GO--生成随机编号的函数CREATE FUNCTION f_RANDBH(@BHLen int)RETURNS varchar(50)ASBEGIN DECLARE @r varchar(50) IF NOT(ISNULL(@BHLen,0) BETWEEN 1 AND 50) SET @BHLen=10 SELECT @r=CHAR(65 +(SUBSTRING(re,1,1) +SUBSTRING(re,2,1) +SUBSTRING(re,3,1))%26) +CHAR(65 +(SUBSTRING(re,4,1) +SUBSTRING(re,5,1) +SUBSTRING(re,6,1))%26) FROM v_RAND WHILE LEN(@r)<@BHLen SELECT @r=@r+CHAR(65 +(SUBSTRING(re,1,1) +SUBSTRING(re,2,1) +SUBSTRING(re,3,1))%26) +CHAR(65 +(SUBSTRING(re,4,1) +SUBSTRING(re,5,1) +SUBSTRING(re,6,1))%26) FROM v_RAND RETURN(LEFT(@r,@BHLen))ENDGO--调用SELECT dbo.f_RANDBH(6),dbo.f_RANDBH(8)--结果: UJXIJD PAPGTQUX
24)字符串MD5
select SUBSTRING(sys.fn_VarBinToHexStr(hashbytes('MD5', CONVERT(varchar(100), '12345'))),3,32)
- 知识小结(PL/SQL)
- PL/SQL基础小结
- pl/sql 小结
- 03、pl/sql小结
- PL/SQL语句小结
- oracle PL/SQL小结
- PL/SQL编程经验小结
- PL/SQL优化规则小结
- PL/SQL优化规则小结
- PL/SQL语言(oracle知识)
- oracle pl/sql 小知识
- 知识小结(SQL SERVER)
- sql知识小结
- PL/SQL开发常见SQL知识
- Oracle9i PL/SQL编程的经验小结
- Oracle9i PL/SQL编程的经验小结
- Oracle9i PL/SQL编程的经验小结
- Oracle之PL/SQL的变量小结
- Html2Servlet--Html代码转换为Servlet小程序
- 克鲁伊夫:巴萨还有很多要学 赢球比华丽更重要
- Polymorphic Protector
- .net 线程和同步
- JAVA学习的一些重点
- 知识小结(PL/SQL)
- 面向Java应用的快速Web服务支持工具 - Netrifex
- [转]小议软件架构设计要点
- 从项目点滴看企业管理
- 三层实木复合地板:更舒适、更稳定的选择
- C#面试题
- 学习Java,C等程序开发的十大诀窍
- Direct 着色
- IP地址*号代替函数