Oracle的存储过程
Posted 新愚俗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle的存储过程相关的知识,希望对你有一定的参考价值。
【replace】【游标】【循环】【fetch】
在ORACLE 中, 若干个有联系的过程可以组合在一起构成程序包。
https://www.2cto.com/database/201610/559389.html
游标定义: cursor [游标名] is [sql语句]
在PL SQL里打开查询窗口,在解释器里输入过程名,按住ctrl点击过程名,就能调出源码。
***存储过程语句
CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)]
{AS|IS}
[说明部分]
BEGIN
可执行部分
[EXCEPTION
错误处理部分]
END [过程名];
***删除存储过程 语法:
DROP PROCEDURE 存储过程名;
---将一个字段中有多个数据,有逗号隔开的,分别输出。
SELECT regexp_substr(‘1101,Yokohama,Japan,1.5.105‘, ‘[^,]+‘, 1, LEVEL) AS output ,‘内容‘ FROM dual CONNECT BY LEVEL <= length(‘1101,Yokohama,Japan,1.5.105‘) -length(REPLACE(‘1101,Yokohama,Japan,1.5.105‘, ‘,‘)) + 1; 结果: 1101 Yokohama Japan 1.5.105
在PL SQL中循环过程中可以写多个游标定义多个循环,学习for循环,类似于
cursor [游标名] is [sql语句]
for [循环名称] IN [游标名] loop---遍历游标,在打印出来
DBMS_OUTPUT.put_line( );
END LOOP;
***存储过程中SQL语句执行会加 【execute immediate】:
简单来说 就是你一个存储过程当中 创建了一个表 table_a 然后要用insert into将其他的数据插入到这个table_a当中,但是因为你在创建过程的时候 table_a还不存在,过程就会显示有编译错误,因为table_a不存在必然导致过程无法执行,所以无法编译成功,而把insert into语句加如到 execute immediate之后 则oracle不会再去理会这个对象是否存在,因此可以成功编译和执行。
----存储过程中参数
---存储过程的参数
---IN 定义一个输入参数变量,用于传递参数给存储过程
--OUT 定义一个输出参数变量,用于从存储过程获取数据
---IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
--这三种参数只能说明类型,不需要说明具体长度 比如 varchar2(12),defaul 可以不写,但是作为一个程序员最好还是写上。
例:---创建有参数的存储过程
create or replace procedure test_param(p_id1 in VARCHAR2 default ‘0‘) as v_name varchar2(32); begin select t.name into v_name from TESTTABLE t where t.id1=p_id1; DBMS_OUTPUT.put_line(‘name:‘||v_name); end;
----执行存储过程
begin
test_param(‘1‘);
end;
default ‘0‘
以上是关于Oracle的存储过程的主要内容,如果未能解决你的问题,请参考以下文章
oracle创建存储过程时,提示错误是:错误(5,18): PL/SQL: ORA-00947: 没有足够的值?代码如下:
oracle创建存储过程时,提示错误是:错误(5,18): PL/SQL: ORA-00947: 没有足够的值?代码如下: