数码资讯
oracle存储过程的常用技术(详细)
在SQL编程中,我们做的最重要的事情是存储过程,存储过程的结构非常简单。除了学习存储过程的基本结构之外,我们还将学习一些关于存储过程编译的有用知识,例如,光标的处理、异常处理、集合的选择等。 1。存储程序结构 1.1第一个存储过程 创建或替换过程proc1( p_para1 VARCHAR2, p_
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在SQL编程中,我们做的最重要的事情是存储过程,存储过程的结构非常简单。除了学习存储过程的基本结构之外,我们还将学习一些关于存储过程编译的有用知识,例如,光标的处理、异常处理、集合的选择等。
1。存储程序结构
1.1第一个存储过程
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(20);
开始
v_name:=张三丰;
p_para3:= v_name;
dbms_output.put_line('p_para3:| | p_para3);
结束;
这是最简单的存储过程。存储过程大致分为几个部分:
创建语句:创建或替换过程存储过程名
如果没有或替换语句,它只是一个新的存储过程。如果系统有存储过程,就会被错误地报告。创建或替换过程,如果系统中没有这样的存储过程,它将创建一个新的存储过程。如果系统中有一个存储过程,它将删除原来的一个,然后再创建一个存储过程。
存储过程名的名称:包括存储过程名和参数列表。参数名和参数类型。参数名不能重复,参数传递模式:输入、输出、输出。
表示输入参数并按值传递值。
输出表示输出参数,可以理解为引用引用。它可以用作外部调用程序存储过程的输出。
输出可以用作输入参数或输出参数。
参数的数据类型只需要指定类型名,不需要指定宽度。
参数的宽度由外部调用方决定。
这个过程可以有参数,并且没有参数。
变量声明块:下面的键作为(a)可以被理解为声明的SQL关键字,用于声明变量。
变量声明块用于声明存储过程所需的变量,其范围是存储过程。此外,此处声明的变量必须指定宽度。
进程语句块:从开始关键字开始的进程的语句块。在这里实现存储过程的具体逻辑。
异常处理块:关键字是异常,它会产生处理语句的异常。
结束块:结束关键字的结果。
1.2存储过程参数转移模式
有三种方法来传输存储过程的参数:输入、输出、输出。
是按值传递的,它是不允许被重新分配存储过程中,如果存储过程的参数没有指定存储参数的传输类型,默认是
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(20);
开始
p_para1:= 'AAA';
p_para2:= {BBB};
v_name:=张三丰;
p_para3:= v_name;
dbms_output.put_line('p_para3:| | p_para3);
无效的;
结束;
警告:用编译错误创建的过程
显示错误;
程序lifeman.proc1错误:
行/队列错误
------------------------------------------------------------------------------
8 / 3 pls-00363:expression'p_para1'cannot作为赋值的目标
8 3:忽略语句
这是不同于其他高级语言,它相当于java中的参数前最后的关键词。
out参数:作为输出参数,重要的是要注意,当一个参数被指定为out类型时,即使在调用存储过程之前分配参数,参数的值仍然为null。在存储过程中。
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(20);
开始
v_name:=张三丰;
p_para3:= v_name;
dbms_output.put_line('p_para1:| | p_para1);
dbms_output.put_line('p_para2:| | p_para2);
dbms_output.put_line('p_para3:| | p_para3);
结束;
SQL> VAR P1 VARCHAR2(10);
SQL> VAR P2 VARCHAR2(10);
SQL> VAR P3 VARCHAR2(10);
SQL> exec:P1 = 'aaaa;
SQL> exec:P2:= 'bbbb;
SQL> exec:P3:= 'cccc;
SQL> exec proc1(P1,P2,:::P3);
p_para1:AAAA
p_para2:
p_para3:张三丰
SQL> exec dbms_output.put_line(:P);
已成功完成
P2
—
输入是真正的传递参数的参考。作为传入参数,它也可以被用来作为一个输出参数。
1.3存储过程参数宽度
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(2);
开始
v_name:= p_para1;
结束;
SQL> VAR P1 VARCHAR2(10);
SQL> VAR P2 VARCHAR2(20);
SQL> VAR P3 VARCHAR2(30);
SQL> exec:P1:=aaaaaa;
SQL> exec proc1(P1,P2,:::P3);
ora-06502:PL / SQL:数值或数值错误:字符串缓冲区太小
ora-06512:在虚张声势者。proc1线,8
ora-06512:1行
首先,我们需要理解,在存储过程的定义中,我们不能指定存储参数的宽度,这就导致我们不能控制存储过程中传入变量的宽度。
这种宽度完全由外部传入决定。
让我们看看输出类型的参数的宽度。
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(2);
开始
p_para2:=aaaaaaaaaaaaaaaaaaaa;
结束;
SQL> VAR P1 VARCHAR2(1);
SQL> VAR P2 VARCHAR2(1);
SQL> VAR P3 VARCHAR2(1);
SQL> exec:P2:= A;
SQL> exec proc1(P1,P2,:::P3);
在这个过程中,p_para2给出20字A.
在外部的调用过程,P2的参数仅仅定义为VARCHAR2(1)。
它不调用P2作为参数,也不会出错,它的实际值是20 A。
从双选择转储(:P2);
转储(:P2)
---------------------------------------------------------------------------
典型值= 1 = 20:97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97 Len
P2
—
aaaaaaaaaaaaaaaaaaaa
看看输入输出参数的宽度。
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(2);
开始
p_para3:=aaaaaaaaaaaaaaaaaaaa;
结束;
SQL> VAR P1 VARCHAR2(1);
SQL> VAR P2 VARCHAR2(1);
SQL> VAR P3 VARCHAR2(1);
SQL> exec proc1(P1,P2,:::P3);
这个过程的执行仍然正确进行。
可以看出,对于内参数,它的宽度是由外部决定的。
对于out和out参数,宽度是由存储过程内部决定的。
因此,在编写存储过程时必须解释参数的宽度,最明智的方法是使用%类型作为参数的数据类型。
1.3个参数的默认值。
存储过程的参数可以设置为默认值。
创建或替换程序procdefault(P1 VARCHAR2,
P2 VARCHAR2 default'mark)
作为
开始
dbms_output.put_line(P2);
结束;
SQL >进行设置;
SQL> exec procdefault(A);
作记号
默认值可以由默认关键字为存储过程的参数指定。在调用存储过程时,可以省略默认值。
需要注意的是,默认值只支持在运输type.out中没有指定默认值的参数的重要
具有默认值的参数不在最终情况下。
创建或替换程序procdefault2(P1 VARCHAR2 default'remark,
P2 VARCHAR2)
作为
开始
dbms_output.put_line(P1);
结束;
第一个参数具有默认值,第二个参数不是。如果我们想使用第一个参数的默认值
执行procdefault2(AA);
这将是错误的。
这是怎么改变的可以指定参数的值。
SQL> exec procdefault2(P2 = >AA);
备注
这是OK,并指定传递给参数P2的aa。
2。存储过程内部块
2.1内部块
我们知道存储过程的结构,语句块从开始和结束开始,这些块可以嵌套。
声明…开始…异常…结束;
创建或替换程序innerblock(P1 VARCHAR2)
作为
O1 VARCHAR2(10):= 'out1;
开始
dbms_output.put_line(O1);
声明
inner1 VARCHAR2(20);
开始
inner1:= 'inner1;
dbms_output.put_line(inner1);
声明
Inner2 VARCHAR2(20);
开始
'inner2 Inner2:=;
dbms_output.put_line(Inner2);
结束;
例外
当别人然后
无效的;
结束;
结束;
您需要注意变量的范围。
三.存储过程的常用技术
3.1集
当我们使用存储过程时,我们经常需要处理一个记录集,也就是说,一系列数据记录。将它们分成单独的多行和多列,这些类型可以称为集合类型。我们比较这些集合类型,以便我们在编程时做出正确的选择。
索引表也被称为表,不能存储在数据库中,元素的数量不受限制,下标可以是负的。
型t_table是表VARCHAR2(20)指数binary_integer;
v_student t_table;
VARCHAR2(20)表示的存储单元的数据类型,并binary_integer代表的元素下标的数据类型。
嵌套表、索引表、无下标子句是嵌套表,它可以存储在数据中,元素的数量是无限的,下标从1开始,需要初始化。
t_nesttable是表字段的类型(20);
t_nesttable v_class;
只有这样的声明不能初始化嵌套表,初始化嵌套表并使用它的构造函数。
v_class:= t_nesttable(A,B,C);
以上描述是本文的全部内容,希望能帮助您学习oracle存储过程。
1。存储程序结构
1.1第一个存储过程
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(20);
开始
v_name:=张三丰;
p_para3:= v_name;
dbms_output.put_line('p_para3:| | p_para3);
结束;
这是最简单的存储过程。存储过程大致分为几个部分:
创建语句:创建或替换过程存储过程名
如果没有或替换语句,它只是一个新的存储过程。如果系统有存储过程,就会被错误地报告。创建或替换过程,如果系统中没有这样的存储过程,它将创建一个新的存储过程。如果系统中有一个存储过程,它将删除原来的一个,然后再创建一个存储过程。
存储过程名的名称:包括存储过程名和参数列表。参数名和参数类型。参数名不能重复,参数传递模式:输入、输出、输出。
表示输入参数并按值传递值。
输出表示输出参数,可以理解为引用引用。它可以用作外部调用程序存储过程的输出。
输出可以用作输入参数或输出参数。
参数的数据类型只需要指定类型名,不需要指定宽度。
参数的宽度由外部调用方决定。
这个过程可以有参数,并且没有参数。
变量声明块:下面的键作为(a)可以被理解为声明的SQL关键字,用于声明变量。
变量声明块用于声明存储过程所需的变量,其范围是存储过程。此外,此处声明的变量必须指定宽度。
进程语句块:从开始关键字开始的进程的语句块。在这里实现存储过程的具体逻辑。
异常处理块:关键字是异常,它会产生处理语句的异常。
结束块:结束关键字的结果。
1.2存储过程参数转移模式
有三种方法来传输存储过程的参数:输入、输出、输出。
是按值传递的,它是不允许被重新分配存储过程中,如果存储过程的参数没有指定存储参数的传输类型,默认是
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(20);
开始
p_para1:= 'AAA';
p_para2:= {BBB};
v_name:=张三丰;
p_para3:= v_name;
dbms_output.put_line('p_para3:| | p_para3);
无效的;
结束;
警告:用编译错误创建的过程
显示错误;
程序lifeman.proc1错误:
行/队列错误
------------------------------------------------------------------------------
8 / 3 pls-00363:expression'p_para1'cannot作为赋值的目标
8 3:忽略语句
这是不同于其他高级语言,它相当于java中的参数前最后的关键词。
out参数:作为输出参数,重要的是要注意,当一个参数被指定为out类型时,即使在调用存储过程之前分配参数,参数的值仍然为null。在存储过程中。
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(20);
开始
v_name:=张三丰;
p_para3:= v_name;
dbms_output.put_line('p_para1:| | p_para1);
dbms_output.put_line('p_para2:| | p_para2);
dbms_output.put_line('p_para3:| | p_para3);
结束;
SQL> VAR P1 VARCHAR2(10);
SQL> VAR P2 VARCHAR2(10);
SQL> VAR P3 VARCHAR2(10);
SQL> exec:P1 = 'aaaa;
SQL> exec:P2:= 'bbbb;
SQL> exec:P3:= 'cccc;
SQL> exec proc1(P1,P2,:::P3);
p_para1:AAAA
p_para2:
p_para3:张三丰
SQL> exec dbms_output.put_line(:P);
已成功完成
P2
—
输入是真正的传递参数的参考。作为传入参数,它也可以被用来作为一个输出参数。
1.3存储过程参数宽度
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(2);
开始
v_name:= p_para1;
结束;
SQL> VAR P1 VARCHAR2(10);
SQL> VAR P2 VARCHAR2(20);
SQL> VAR P3 VARCHAR2(30);
SQL> exec:P1:=aaaaaa;
SQL> exec proc1(P1,P2,:::P3);
ora-06502:PL / SQL:数值或数值错误:字符串缓冲区太小
ora-06512:在虚张声势者。proc1线,8
ora-06512:1行
首先,我们需要理解,在存储过程的定义中,我们不能指定存储参数的宽度,这就导致我们不能控制存储过程中传入变量的宽度。
这种宽度完全由外部传入决定。
让我们看看输出类型的参数的宽度。
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(2);
开始
p_para2:=aaaaaaaaaaaaaaaaaaaa;
结束;
SQL> VAR P1 VARCHAR2(1);
SQL> VAR P2 VARCHAR2(1);
SQL> VAR P3 VARCHAR2(1);
SQL> exec:P2:= A;
SQL> exec proc1(P1,P2,:::P3);
在这个过程中,p_para2给出20字A.
在外部的调用过程,P2的参数仅仅定义为VARCHAR2(1)。
它不调用P2作为参数,也不会出错,它的实际值是20 A。
从双选择转储(:P2);
转储(:P2)
---------------------------------------------------------------------------
典型值= 1 = 20:97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97 Len
P2
—
aaaaaaaaaaaaaaaaaaaa
看看输入输出参数的宽度。
创建或替换过程proc1(
p_para1 VARCHAR2,
p_para2出空,
在p_para3 VARCHAR2
作为)
v_name VARCHAR2(2);
开始
p_para3:=aaaaaaaaaaaaaaaaaaaa;
结束;
SQL> VAR P1 VARCHAR2(1);
SQL> VAR P2 VARCHAR2(1);
SQL> VAR P3 VARCHAR2(1);
SQL> exec proc1(P1,P2,:::P3);
这个过程的执行仍然正确进行。
可以看出,对于内参数,它的宽度是由外部决定的。
对于out和out参数,宽度是由存储过程内部决定的。
因此,在编写存储过程时必须解释参数的宽度,最明智的方法是使用%类型作为参数的数据类型。
1.3个参数的默认值。
存储过程的参数可以设置为默认值。
创建或替换程序procdefault(P1 VARCHAR2,
P2 VARCHAR2 default'mark)
作为
开始
dbms_output.put_line(P2);
结束;
SQL >进行设置;
SQL> exec procdefault(A);
作记号
默认值可以由默认关键字为存储过程的参数指定。在调用存储过程时,可以省略默认值。
需要注意的是,默认值只支持在运输type.out中没有指定默认值的参数的重要
具有默认值的参数不在最终情况下。
创建或替换程序procdefault2(P1 VARCHAR2 default'remark,
P2 VARCHAR2)
作为
开始
dbms_output.put_line(P1);
结束;
第一个参数具有默认值,第二个参数不是。如果我们想使用第一个参数的默认值
执行procdefault2(AA);
这将是错误的。
这是怎么改变的可以指定参数的值。
SQL> exec procdefault2(P2 = >AA);
备注
这是OK,并指定传递给参数P2的aa。
2。存储过程内部块
2.1内部块
我们知道存储过程的结构,语句块从开始和结束开始,这些块可以嵌套。
声明…开始…异常…结束;
创建或替换程序innerblock(P1 VARCHAR2)
作为
O1 VARCHAR2(10):= 'out1;
开始
dbms_output.put_line(O1);
声明
inner1 VARCHAR2(20);
开始
inner1:= 'inner1;
dbms_output.put_line(inner1);
声明
Inner2 VARCHAR2(20);
开始
'inner2 Inner2:=;
dbms_output.put_line(Inner2);
结束;
例外
当别人然后
无效的;
结束;
结束;
您需要注意变量的范围。
三.存储过程的常用技术
3.1集
当我们使用存储过程时,我们经常需要处理一个记录集,也就是说,一系列数据记录。将它们分成单独的多行和多列,这些类型可以称为集合类型。我们比较这些集合类型,以便我们在编程时做出正确的选择。
索引表也被称为表,不能存储在数据库中,元素的数量不受限制,下标可以是负的。
型t_table是表VARCHAR2(20)指数binary_integer;
v_student t_table;
VARCHAR2(20)表示的存储单元的数据类型,并binary_integer代表的元素下标的数据类型。
嵌套表、索引表、无下标子句是嵌套表,它可以存储在数据中,元素的数量是无限的,下标从1开始,需要初始化。
t_nesttable是表字段的类型(20);
t_nesttable v_class;
只有这样的声明不能初始化嵌套表,初始化嵌套表并使用它的构造函数。
v_class:= t_nesttable(A,B,C);
以上描述是本文的全部内容,希望能帮助您学习oracle存储过程。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。