当前位置:首页 » 存储配置 » oracle存储过程格式

oracle存储过程格式

发布时间: 2023-10-11 04:05:13

⑴ datagrips oracle编写存储过程

定义方式:
变量名 类型(长度);

普通变量类型的赋值方式有两种:
1、通过 := 直接赋值;
2、通过 select (表中变量名) into (定义的普通变量) from ... where ... 赋值;
使用方法如下:

定义方式
变量名 表名.列名%type;
使用方法如下:

定义方式
对象名 表名%rowtype
使用方法如下:

定义
用于临时存储一个查询返回的多行数据,通过遍历的方式可以逐行访问处理该结果集的数据;
游标属性

⑵ Oracle 的存储过程怎么写。

oracle 存储过程的基本语法

1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
参数1 IN NUMBER,
参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN

END 存储过程名字

2.SELECT INTO STATEMENT
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...

3.IF 判断
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;

4.while 循环
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;

5.变量赋值
V_TEST := 123;

6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;

7.带参数的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(变量值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;

8.用pl/sql developer debug
连接数据库后建立一个Test WINDOW
在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试

⑶ Oracle数据库的存储过程怎么写

1 CREATE OR REPLACE PROCEDURE 存储过程名
2 IS
3 BEGIN
4 NULL;
5 END;

行1:
CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;
行2:
IS关键词表明后面将跟随一个PL/SQL体。
行3:
BEGIN关键词表明PL/SQL体的开始。
行4:
NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句;
行5:
END关键词表明PL/SQL体的结束.
存储过程创建语法:
create or replace procere 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围); --vs_msgVARCHAR2(4000);
变量2 类型(值范围);
Begin
Select count(*) into 变量1 from 表A where列名=param1;

If (判断条件) then
Select 列名 into 变量2 from 表A where列名=param1;
Dbms_output。Put_line(‘打印信息’);
Elsif (判断条件) then
Dbms_output。Put_line(‘打印信息’);
Else
Raise 异常名(NO_DATA_FOUND);
End if;
Exception
When others then
Rollback;
End;

⑷ oracle 怎么执行存储过程跟函数

调用oracle存储过程用begin...end的方式。
基本语法:
begin 存储过程名(参数1,参数2……);--如果无参数则省略括号及括号内部分end;

如,有存储过程:
create or replace procere p_testasv_begintime varchar2(20);v_endtime varchar2(20);v_str varchar2(10);begin v_begintime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'); select 'badkano' into v_str from al; v_endtime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'); dbms_output.put_line('开始时间为:'||v_begintime); dbms_output.put_line('结束时间为:'||v_endtime);end;

执行:begin p_test;end;

⑸ Oracle存储过程游标for循环怎么写

  • 首先编写存储过程的整体结构,如下:

    create or replace procere test_proc is

    v_date date; --变量定义

    begin

    select sysdate into v_date from al;

    end test_proc;

⑹ PL_sql如何执行oracle存储过程

要成功执行这个存储过程,你需要注意几点:
1.select * from ods_area; 不能直接在pl/sql 中作为语句执行。
应该用 select 字段 into plsql变量 from 表名;
的形式来获取表中的数据,保存到plsql变量中。

2. 存储过程的语法格式为:
create or replace procere area
is
--变量声明;
begin
--过程主体;
end area;
3. 如果存储过程代码无误,可以通过 "/" 来执行代码,编译存储过程。
4.通过exec 或 execute 来调用编译后的存储过程。

例如:

-- 创建procere:
create or replace procere area
is
num number ;
v_areaRecord al%ROWTYPE;
begin
--例子1
select * into v_areaRecord from al;
--例子2
select 12345 into num from al;
end area;
/
-- 通过 / 执行;

--调用
exec area;

⑺ ORACLE 存储过程中的....是什么意思如下 ' || '''' || 'yyyy-mm-dd' || '''' || '

|| 是字符串连接符号
'''' 四个单引号,第1,4个单引号是正常的单引号,第2个单引号是转义字符,第3个单引号,编译后想保留的单引号。
最终目的 就是to_char(a.txntimestamp, 'yyyy-mm-dd') 这样的格式
这里头不是直接写sql文,而是用字符串拼接成新的sql字符串。

⑻ oracle存储过程基本语法

一:存储过程

创建存储过程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系统权限   

删除存储过程,是过程的创建者或者拥有DROP ANY PROCEDURE系统权限 

修改存储过程,则只能是过程的创建者或者拥有ALTER ANY PROCEDURE系统权限的人

执行(或调用)存储过程,是过程的创建者或是拥有EXECUTE ANY PROCEDURE系统权限的人或是被拥有者授予EXECUTE权限的人

1:语法

 1)创建

CREATE[ORREPLACE]PROCEDURE存储过程名[(参数[IN|OUT|INOUT] 数据类型...)]

{AS|IS}

[说明部分]

BEGIN

可执行部分

[EXCEPTION

错误处理部分]

END[过程名];

 说明:

   OR REPLACE 表示如果存在就覆盖存储过程

   参数有三种形式:IN、OUT和IN OUT。则默认为IN。

  关键字AS也可以写成IS,后跟过程的说明部分,可以在此定义过程的局部变量。

2)删除存储过程:

DROP PROCEDURE 存储过程名;

3)修改存储过程:

      ALTER PROCEDURE 存储过程名 COMPILE; 

4)执行存储过程

      EXECUTE 模式名.存储过程名[(参数...)]; 

     或

       BEGIN 

模式名.存储过程名[(参数...)];

END;

另外:参数可以是变量、常量或表达式

 要其它用户执行存储过程须要给其它用户授权

GRANT EXECUTE ON 存储过程名 TO 用户名

 2:参数说明

IN 定义一个输入参数变量,用于传递参数给存储过程

OUT 定义一个输出参数变量,用于从存储过程获取数据

IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能

 1)参数名 IN 数据类型 DEFAULT 值;

          定义一个输入参数变量,用于传递参数给存储过程。

          可以是常量、有值变量或表达式

          DEFAULT 关键字为可选项,用来设定参数的默认值。如果在调用存储过程时不指明参数,则参数变量取默认值

          在存储过程中,输入变量接收主程序传递的值,但不能对其进行赋值。

2)参数名 OUT 数据类型;

          定义一个输出参数变量,用于从存储过程获取数据,即变量从存储过程中返回值给主程序。

          在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式。

          在存储过程中,参数变量只能被赋值而不能将其用于赋值,而且必须给输出变量至少赋值一次。

3)参数名 IN OUT 数据类型 DEFAULT 值; 

          定义一个输入、输出参数变量,兼有以上两者的功能。

          在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式。

          DEFAULT 关键字为可选项,用来设定参数的默认值。

          在存储过程中,变量接收主程序传递的值,同时可以参加赋值运算,也可以对其进行赋值。在存储过程中必须给变量至少赋值一次。

补充:如果省略IN、OUT或IN OUT,则默认模式是IN。 

          调用它时参数个数与位置可以不一致,用以下形式调用:

EXECUTE CHANGE_SALARY(P_RAISE=>80,P_EMPNO=>7788);  //=>运算符左侧是参数名,右侧是参数表达式

 二:函数

创建函数,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系统权限

删除函数,需要是函数的创建者或者是拥有DROP ANY PROCEDURE系统权限的人

修改函数,需要是函数的创建者或者拥有ALTER ANY PROCEDURE系统权限的人

执行函数,需要是函数的创建者或拥有EXECUTE ANY PROCEDURE系统权限的人

1:语法

1)创建:

CREATE[ORREPLACE]FUNCTION函数名[(参数[IN] 数据类型...)]

RETURN数据类型

{AS|IS}

[说明部分]

BEGIN

可执行部分

RETURN(表达式)

[EXCEPTION

    错误处理部分]

END[函数名];

 说明:

     参数是可选的,但只能是IN类型(IN关键字可以省略)。

     在定义部分的RETURN 数据类型,用来表示函数的数据类型,也就是返回值的类型,不可省略。

     在可执行部分的RETURN(表达式),用来生成函数的返回值,其表达式的类型应该和定义部分说明的函数返回值的数据类型一致。在函数的执行部分可以有多个RETURN语句,但只有一个RETURN语句会被执行,一旦执行了RETURN语句,则函数结束并返回调用环境。 

2)删除

      DROP FUNCTION 函数名;

3)修改

      ALTER PROCEDURE 函数名 COMPILE;

4)执行

      变量名:=函数名(...) 

三:对存储过程 和 函数的查看(可以通过对数据字典【USER_SOURCE】的访问来查询存储过程或函数的有关信息)

 1:查询某个存储过程序内容

select TEXT from user_source WHERE NAME='存储过程名';

 2:查看数据字殿

DESCRIBE USER_SOURCE ; //命令行中

 3:查看存储过程的参数

DESCRIBE say_hello; //后面是过程名

 4:查看发生编辑错误

SHOW ERRORS ;

 5:查询一个存储过程或函数是否是有效状态(即编译成功)

SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='过程名';//注意大小写

VALID表示该存储过程有效(即通过编译),INVALID表示存储过程无效或需要重新编译。它的状态会改变,这与它依赖外部表(表删除修改等操作)有关系

6:查看存储过程与表的依赖关系

SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='SAY_HELLO';

 说明

NAME为实体名,TYPE为实体类型,REFERENCED_OWNER为涉及到的实体拥有者账户,REFERENCED_NAME为涉及到的实体名,REFERENCED_TYPE 为涉及到的实体类型。

问题:

如果一个用户A被授予执行属于用户B的一个存储过程的权限,在用户B的存储过程中,访问到用户C的表,用户B被授予访问用户C的表的权限,但用户A没有被授予访问用户C表的权限,那么用户A调用用户B的存储过程是失败的还是成功的呢?答案是成功的。

⑼ Oracle存储过程游标for循环怎么写

举例回答:

案例:

--For循环游标
--(1)定义游标
--(2)定义游标变量
--(3)使用for循环来使用这个游标
declare
--类型定义
cursorc_job
is
selectempno,ename,job,sal
fromemp
wherejob='MANAGER';
--定义一个游标变量v_cinfoc_emp%ROWTYPE,该类型为游标c_emp中的一行数据类型
c_rowc_job%rowtype;
begin
forc_rowinc_jobloop
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
endloop;
end;
热点内容
电脑访问存储服务器硬盘 发布:2025-01-23 02:08:29 浏览:568
lol破解脚本 发布:2025-01-23 02:07:54 浏览:129
算法是步骤 发布:2025-01-23 01:47:22 浏览:237
ip访问控制实验 发布:2025-01-23 01:41:51 浏览:105
crv20万能落地什么配置 发布:2025-01-23 01:35:33 浏览:172
s10手机怎么查配置 发布:2025-01-23 01:34:48 浏览:890
九阴真经3d免费脚本 发布:2025-01-23 01:33:47 浏览:686
gcc编译分为哪几个阶段 发布:2025-01-23 01:33:45 浏览:806
战地5怎么看哪个服务器 发布:2025-01-23 01:33:07 浏览:367
首选域名服务器怎么设置 发布:2025-01-23 01:32:18 浏览:156