首页 > 编程知识 正文

oracle存储过程参数是游标,plsql存储过程游标调用

时间:2023-05-06 03:17:22 阅读:115194 作者:1245

语法:

create [ or replace ] procedure procedure _ name

(arg1 [mode1] datatype1,arg2 [mode2] datatype2,)

IS [AS]

pl/SQL块;

mode用于指定输入输出参数。 IN是输入参数,OUT是输出参数,输入参数可以省略IN,OUT不能省略。

如果没有输入输出参数,则可以省略

名为arg1 [mode1] datatype1,arg2 [mode2] datatype2, ]的行

具有输入、输出参数的简单示例

createorreplaceprocedureproc _ in _ out _ test (var _ empno number,

var_ename OUT VARCHAR2) IS

比根

selectenameintovar _ enamefromempwhereempno=var _ empno;

执行

WHEN no_data_found THEN

raise_application_error(-20000,'此员工不存在');

结束;

调用此过程

SQL var vempno number;

SQLvarvenamevarchar2(10;

SQL exec :vempno:=7934;

sqlexec proc _ in _ out _ test (: v empno,vename;

pl/sqlproceduresuccessfullycompleted

vename

------------

反射镜

SQL exec :vempno:=7935;

sqlexec proc _ in _ out _ test (: v empno,vename;

begin proc _ in _ out _ test (: v empno,vename ); 结束;

ORA-20000:此员工不存在

ORA-06512:' SCOTT.PROC_IN_OUT_TEST ',line 7

ora-065123360线路1

显示光标语法:

cursor cursor _ name isselect _ statement

简单示例:

DECLARE

v_empname emp.ename%TYPE;

v_job emp.job%TYPE;

v_deptno emp.deptno%TYPE;

CURSOR emp_test IS --声明光标

SELECT ename,job FROM emp WHERE deptno=v_deptno;

比根

v_deptno :=10;

OPEN emp_test; -打开光标

-循环光标

LOOP

FETCH emp_test

INTO v_empname,v_job; -取值

EXIT WHEN emp_test%NOTFOUND; -没有记录时结束循环

DMS _ output.put _ line (' empname='|| v _ empname||,job=' || v_job );

结尾环路;

CLOSE emp_test;

结束;

-光标属性为%FOUND、%NOTFOUNRD、%ISOPEN、%ROWCOUNT;

如果--%FOUND:获得记录,则返回true

--%NOTFOUNRD :如果无法获取记录,则返回true

--% is如果打开open :游标,则返回true

--%ROWCOUNT:表示找到的记录数,从1开始

参数化光标只是声明方式与打开光标时略有不同

cursor EMP _ test2(p _ deptno EMP.deptno % type ) IS --声明光标

选择名称,job FROM emp WHERE deptno=p_deptno;

openEMP_test2(10; -打开光标

光标变量:

定义光标更改类型

type type _ nameisrefcursor [ return return _ type ];

createorreplaceprocedurecursorvariabletest (p _ tableinvarchar2) IS

TYPE t_emp_dept IS REF CUR

SOR; --定义游标变量类型

v_cursorvar t_emp_dept; --声明游标变量

v_empno emp.empno%TYPE;

v_ename emp.ename%TYPE;

v_job emp.job%TYPE;

v_dname dept.dname%TYPE;

v_loc dept.loc%TYPE;

BEGIN

IF p_table = 'emp' THEN

v_empno := 7369;

OPEN v_cursorvar FOR

SELECT ename, job FROM emp WHERE empno = v_empno; --打开游标变量

ELSE

IF p_table = 'dept' THEN

OPEN v_cursorvar FOR

SELECT dname, loc FROM dept; --打开游标变量

ELSE

raise_application_error(-20000, '请输入emp或dept!');

END IF;

END IF;

LOOP

IF p_table = 'emp' THEN

FETCH v_cursorvar

INTO v_ename, v_job;

EXIT WHEN v_cursorvar%NOTFOUND;

dbms_output.put_line('ename=' || v_ename || ',job=' || v_job);

ELSE

FETCH v_cursorvar

INTO v_dname, v_loc;

EXIT WHEN v_cursorvar%NOTFOUND;

dbms_output.put_line('dname=' || v_dname || ',loc=' || v_loc);

END IF;

END LOOP;

CLOSE v_cursorvar; --关闭游标变量

END;

使用for循环

declare

cursor emp_cursor is select ename,sal from emp ;

begin

for emp_record in emp_cursor loop

dbms_output.put_line('姓名: '||emp_record.ename||' , 工资: '||emp_record.sal);

end loop;

end ;

/

约束与无约束的游标变量

无约束的游标变量包含特定的返回类型(type,rowtype,record等),查询的选择列表必须匹配游标的返回类型,否则会出现预

定义的ROWTYPE_MISMATCH异常。约束的游标变量没有Return子句。

oracle存储过程+游标处理select数据

create or replace PROCEDURE UPDATE_RECORDCODE is cursor location_data is select * from location wher ...

(转)oracle 存储过程 带游标作为OUT参数输出

(转)oracle 存储过程 带游标作为OUT参数输出 存储过程返回OUT参数的游标 例子. 包中带过程 要自己定义一个type [cur_name] is ref cursor游标,返回的时候就直接 ...

C#执行oracle返回游标类型的存储过程

存储过程代码为: create or replace procedure proc_test(pCursor OUT pak_pub.ut_cursor) AS begin -- 使用游标 open ...

Java调用oracle存储过程通过游标返回临时表数据

注:本文来源于 Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

oracle存储过程(返回列表的存储结合游标使用)总结 以及在java中的调用

这段时间开始学习写存储过程,主要原因还是因为工作需要吧,本来以为很简单的,但几经挫折,豪气消磨殆尽,但总算搞通了,为了避免后来者少走弯路,特记述与此,同时亦对自己进行鼓励. 以下是我在开发项目中第一次 ...

oracle存储过程和游标的使用

oracle存储过程和游标的使用 (2011-04-19 14:52:47) 转载▼ 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情 ...

ORACLE存储过程,循环语法和游标

1.定义所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出 ...

oracle 存储过程

来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...

Oracle存储过程语法

原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程  1 CREATE OR REPLACE PROCEDURE 存储过程名  ...

随机推荐

提升mysql性能的建议

使用show status命令查看mysql状态相关的值及其含义:使用show status命令含义如下:aborted_clients 客户端非法中断连接次数aborted_connects 连接m ...

i春秋url地址编码问题

i春秋学院是国内比较知名的安全培训平台,前段时间看了下网站,顺便手工简单测试常见的XSS,发现网站搜索功能比较有意思. 其实是对用户输入的内容HTML编码和URL编码的处理方式在这里不合理,提交到乌云 ...

August 12th 2016 Week 33rd Friday

Everything is good in its season. 万物逢时皆美好. Every dog has its day. You are not in your best condition ...

openstack简介

OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作.OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单.可大规模扩展.丰富.标准统一的云计算管理平台 ...

给新建的Cocos2d-x 3.X的Win32工程添加CocoStudio库

1.我们在VS中找到"解决方案资源管理器", 在解决方案"HelloCocos"上点击右键, 选择添加现有项目. 在弹出的对话框中选择************* ...

iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry)

iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry) 随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫 ...

Python内置函数(32)——input

英文文档: input([prompt]) If the prompt argument is present, it is written to standard output without a ...

Linux压缩和解压缩类指令

⒈gzip ①gzip 文件 压缩文件,只能将文件压缩为*.gz文件 ②gunzip 文件.gz 用于解压文件 ⒉zip ①zip [选项] xxx.zip 需要压缩的内容 压缩文件和目录 常用选项: ...

Python Django框架笔记(四):数据分页和CSRF跨站点请求伪造

(一)数据分页  可以参考  https://docs.djangoproject.com/en/2.0/topics/pagination/ 模板:如果只要显示 1.2.3.4.5.6....的话, ...

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。