一,Plsql 调试存储过程:
1、
2、
3、
4、
二,oracle存储过程基本语法
1、
CREATE OR REPLACE PROCEDURE 存储过程名
(
输入输出参数
)
IS
变量定义
BEGIN
END 存储过程名;
2、
If 逻辑表达式 then
End if;
If
Begin
End;
Else
Begin
End;
End if;
If 逻辑表达式 then
Elseif 逻辑表达式 then
Else
End if;
3、
For
…
End loop;
E.g:
CREATE OR REPLACE PROCEDURE TEST
is
BEGIN
END TEST;
注:这里的 i 可以不用申明,并且在循环体中,i 会自增
4、
While 条件语句 loop
Begin
End;
End LOOP;
E.g:
CREATE OR REPLACE PROCEDURE TEST
is
i int := 1;
BEGIN
END TEST;
注:这里的 i 需要申明,并且循环体中,要对 i 进行改变
5、
定义游标
打开游标
提取数据
关闭游标
E.g:
CREATE OR REPLACE PROCEDURE TEST
is
v_fid nvarchar2(80);
Cursor cur_test is
select fid from t_pm_user; --定义游标
BEGIN
END TEST;
三,oracle与sqlserver部分差异
1、
Ø
S:select abs(-1) value
O:select abs(-1) value from dual
Ø
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from dual
Ø
S:select floor(-1.001) value
O:select floor(-1.001) value from dual
Ø
S:select cast(-1.002 as int) value
O:select trunc(-1.002) value from dual
Ø
S:select round(1.23456,4) value 1.23460
O:select round(1.23456,4) value from dual 1.2346
Ø
S:select rand() value
O:select sys.dbms_random.value(0,1) value from dual
Ø
S:select F1,IsNull(F2,10) value from Tbl
O:select F1,nvl(F2,10) value from Tbl
Ø
S:select '11'+'22' value
O:select CONCAT('11','22') value from dual
Ø
S:select CHARINDEX('s','sdsq',2) value
O:select INSTR('sdsq','s',2) value from dual
Ø
S:select substring('abcd',2,2) value
O:select substr('abcd',2,2) value from dual
Ø
S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual
Ø
S:没发现
O:select Translate('fasdbfasegas','fa','我' ) value from dual
Ø
S:len,datalength
O:length
Ø
S:select space(10)+'abcd' value
O:select LPAD('abcd',14) value from dual
Ø
S:select 'abcd'+space(10) value
O:select RPAD('abcd',14) value from dual
Ø
S:ltrim,rtrim
O:ltrim,rtrim,trim
Ø
S:select getdate() value
O:select sysdate value from dual
Ø
S:select convert(char(10),getdate(),20) value
O:select trunc(sysdate) value from dual
select to_char(sysdate,'yyyy-mm-dd') value from dual
Ø
S:select convert(char(8),getdate(),108) value
O:select to_char(sysdate,'hh24:mm:ss') value from dual
Ø
S:可以直接转或者select cast('2004-09-08'as datetime) value
O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL
Ø
S:select datediff(ss,getdate(),getdate()+12.3) value
O:直接用两个日期相减(比如d1-d2=12.3)
SELECT (d1-d2)*24*60*60 vaule FROM DUAL
Ø
S:select dateadd(mi,8,getdate()) value
2、
Ø
S:直接在存储过程中用select即可
O:一般在参数中定义一个游标类型的输出参数,在过程体中用 open 游标名称 for
Ø
S:语句结尾不用加分号
O:语句结尾需要加分号
Ø
S:一般动态创建临时表,临时表是一种”内存表”,不用后会自动删除表结构
O:提前创建好临时表,oracle中临时表保存的是一个会话或者事务的数据,当断开连接或事务提交回滚后,临时表中的数据自动清空(清空的只是当前会话的临时表数据),但表结构还存在。由于Oracle不是一种内存中的数据库. 所以如果Oracle类似SQL Server 频繁的对临时表进行建立和删除,必定会影响性能.所以Oracle会保留临时表的定义直到用户DROP TABLE。
Ø
S:有专门的自增长字段
O:需要在数据库中创建序列(sequence),使用时用序列名称. Nextval获得
Ø
S:exec(sql字符串)
O:execute immediate sql字符串;
Ø
S:用+号
O:用||号