oracle存储过程或者用法_docker创建容器

(5) 2024-06-20 15:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
oracle存储过程或者用法_docker创建容器,希望能够帮助你!!!。

我们都知道SQL语言是没有判断和过程控制语句的,而PL/SQL又很好的补充了SQL语言这方面的不足。而存储过程也是一种PL/SQL块,但是存储过程又跟传统的PL/SQL块不一样,存储过程是以命名的方式存储于数据库中的。它有很多优点,比如:

1、存储过程是以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。

2、存储过程可由数据库提供安全保证,要想使用存储过程,需要有存储过程的所有者的授权,只有被授权的用户或创建者本身才能调用执行存储过程。

3、存储过程的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL程序)。一个重复使用的功能,可以设计成为存储过程。

4、像其他高级语言的过程和函数一样,可以传递参数给存储过程,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名的调用返回函数值。

5、存储过程需要进行编译,以排除语法错误,只有编译通过才能调用。

Oracle存储过程基本语法:

CREATE OR REPLACE PROCEDURE 存储过程名(参数)  IS/AS  变量  BEGIN  可执行部分  EXCEPTION  错误处理部分  END; 

按照惯例举个hello world的例子:

create or replace procedure hello as   say_hi varchar2(20);  begin   say_hi := 'Hello World';   dbms_output.put_line(say_hi);  end; 

语法说明:

1、create or replace procedure是创建存储过程的一个基本语法

2、在存储过程(PROCEDURE)和函数(FUNCTION)中使用IS和AS并没有太大区别,在视图(VIEW)中只能用AS不能用IS,在游标(CURSOR)中只能用IS不能用AS。后面一般跟变量声明。 

3、begin和end之间是PL/SQL程序体,其中exception来指定失败处理流程。 

调用一个存储过程

begin   -- Call the procedure   hello;  end; 

存储的查看和删除:

查询存储过程hello的创建脚本

select * from user_source where name='HELLO';

查看存储过程hello的状态

select * from user_objects where object_name = 'HELLO';

重点看status列的状态,valid表示该存储过程是通过编译的,invalid我们可以看到一个存储过程是有参数可以声明的,那么关于参数肯定就有输入和输出参数的区别了

三种形式的参数:

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

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

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

参数的定义形式和作用如下:

IN参数

语法:参数名 IN 数据类型 DEFAULT 值;

定义一个输入参数变量,用于传递参数给存储过程。在调用存储过程时,主程序的实际参数可以是常量、有值变量或表达式等。DEFAULT 关键字为可选项,用来设定参数的默认值。如果在调用存储过程时不指明参数,则参数变量取默认值。在存储过程中,输入变量接收主程序传递的值,但不能对其进行赋值。

OUT参数

语法:参数名 OUT 数据类型;

定义一个输出参数变量,用于从存储过程获取数据,即变量从存储过程中返回值给主程序。在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式。在存储过程中,参数变量只能被赋值而不能将其用于赋值,在存储过程中必须给输出变量至少赋值一次。

IN OUT参数

语法:参数名 IN OUT 数据类型 DEFAULT 值;

定义一个输入、输出参数变量,兼有以上两者的功能。在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式。DEFAULT 关键字为可选项,用来设定参数的默认值。在存储过程中,变量接收主程序传递的值,同时可以参加赋值运算,也可以对其进行赋值。在存储过程中必须给变量至少赋值一次。

1、参数in的举例

create or replace procedure say_hello (to_who in varchar2 default 'zhangsan') as  begin   dbms_output.put_line('Say Hi to '|| to_who);  end;  执行 begin   -- Call the procedure   say_hello( 'peter');  end; 

2、参数out的举例

输出模式的参数,用于输出值,会忽略传入的值。在子程序内部可以对其进行修改。 

输出:子程序执行完毕后,out模式参数最终的值会赋值给调用时对应的<实参变量>。 

注意:out模式参数的调用,必须通过变量。

create or replace procedure pout(p1 out int) as  begin   p1 := 33;  end;  执行 declare  var1 int := 30;  begin   dbms_output.put_line(var1);   pout(var1);   dbms_output.put_line(var1);  end; 

第一次输出30,第二次输出33。

3、参数in out的举例

输入输出模式:能接收传入的实参值;在子程序内部可以修改; 可以输出(必须用实参变量调用)
 

create or replace procedure pinout(p1 in out int) as  begin   dbms_output.put_line(p1);   p1 := 44;  end;  执行 declare  var1 int := 40;  begin   dbms_output.put_line(var1);   pinout(var1);   dbms_output.put_line(var1);  end; 

 

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复