基于 JetBrains DataGrip 之 Oracle PL/SQL 攻略 (二)
来源:互联网 发布:旧电脑安装linux 编辑:程序博客网 时间:2024/06/07 00:59
对异常的检测
EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('无相关匹配的信息'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('实际返回的行数超出请求的行数');
使用游标从数据库中检索单行数据,进行两个的FETCH,进而判断结果
DECLARE --创建一个游标 CURSOR emp_cursor IS SELECT first_name, last_name, email FROM employees WHERE employee_id = &emp_id; first VARCHAR2(20); last VARCHAR2(25); email VARCHAR2(25);BEGIN --打开游标 OPEN emp_cursor; FETCH emp_cursor INTO first, last, email; IF emp_cursor%NOTFOUND THEN RAISE NO_DATA_FOUND; ELSE -- 第二次查找,判断异常 FETCH emp_cursor INTO first, last, email; IF emp_cursor%FOUND THEN -- 抛出异常 RAISE TOO_MANY_ROWS; ELSE DBMS_OUTPUT.PUT_LINE( 'Employee Information for ID: ' || first || ' ' || last || ' - ' || email); END IF; END IF; --关闭游标 CLOSE emp_cursor;EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('No employee matches the given ID'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('More than one employee matches the given ID');END;/
限定列名与变量名–>尽量不一样否者用 圆点标记法利用存储过程限定变量名,也可以使用代码块进行限定…
查询结果返回到PL/SQL 记录中
DECLARE CURSOR wms_goods_cur IS SELECT GOODSID, GOODSNAME, GOODSINVNAME FROM WMS_GOODS WHERE GOODSID = 1000020598; --记录表的行结构 wms_good wms_goods_cur%ROWTYPE;BEGIN OPEN wms_goods_cur; FETCH wms_goods_cur INTO wms_good; IF wms_goods_cur%FOUND THEN CLOSE wms_goods_cur; DBMS_OUTPUT.PUT_LINE('药品的id:'|| wms_good.GOODSID || ' 药品的名称: ' || wms_good.GOODSNAME || ' 药品的别称: ' || wms_good.GOODSINVNAME); ELSE DBMS_OUTPUT.PUT_LINE('没有匹配到的药品'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('无匹配的系你');END;/
关于自定义数据结构来接收查询结果
DECLARE -- 声明数据结构 TYPE wms_goods_info IS RECORD (id WMS_GOODS.GOODSID%TYPE, name WMS_GOODS.GOODSNAME%TYPE, invname WMS_GOODS.GOODSINVNAME%TYPE); -- 使用数据接口的变量 wms_good_rec wms_goods_info;BEGIN -- 填充变量 SELECT GOODSID, GOODSNAME, GOODSINVNAME INTO wms_good_rec FROM WMS_GOODS WHERE GOODSID = 1000005274; -- 输出 DBMS_OUTPUT.PUT_LINE('药品的id:' || wms_good_rec.id || ' 药品的名称: ' || wms_good_rec.name || ' 药品的别称: ' || wms_good_rec.invname); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('无匹配信息');END;/
循环遍历查询的行结果
--方案一:直接在 IN 后接一个查询语句SET SERVEROUTPUT ON;BEGIN DBMS_OUTPUT.ENABLE(1000000); FOR wms_goods IN ( SELECT GOODSID, GOODSNAME, GOODSINVNAME FROM WMS_GOODS WHERE GOODSID IS NOT NULL ) LOOP DBMS_OUTPUT.PUT_LINE(wms_goods.GOODSID || ' ' || wms_goods.GOODSNAME || ' - ' || wms_goods.GOODSINVNAME); END LOOP;END;/--方案二:构建CURSOR,然后在IN后遍历该游标SET SERVEROUTPUT ON;DECLARE CURSOR wms_goods IS SELECT GOODSID, GOODSNAME, GOODSINVNAME FROM WMS_GOODS WHERE GOODSID IS NOT NULL; emp_rec wms_goods%ROWTYPE;BEGIN FOR emp_rec IN wms_goods LOOP DBMS_OUTPUT.PUT_LINE(emp_rec.GOODSID || ' ' || emp_rec.GOODSNAME || ' - ' || emp_rec.GOODSINVNAME); END LOOP;END;/
获取环境与会话的信息
DECLARE username VARCHAR2(100); ip_address VARCHAR2(100);BEGIN SELECT -- 可自定义设置命名空间 另外 USERENV 的参数列表可参考 -- https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm SYS_CONTEXT('USERENV', 'SESSION_USER'), SYS_CONTEXT('USERENV', 'IP_ADDRESS') INTO username, ip_address FROM DUAL; DBMS_OUTPUT.PUT_LINE('The connected user is: ' || username || ', and the IP address is ' || ip_address);END obtain_user_info;/
0 0
- 基于 JetBrains DataGrip 之 Oracle PL/SQL 攻略 (二)
- 基于 JetBrains DataGrip 之 Oracle PL/SQL 攻略 (一)
- DataGrip是否支持Oracle的pl/sql?
- Oracle PL/SQL攻略
- Oracle PL/SQL语言基础之二
- ORACLE PL/SQL编程详解之二
- JetBrains DataGrip 1.0.3
- Pl/SQL 远程访问Oracle数据库攻略
- oracle 之 pl/sql
- Oracle之pl/sql
- Oracle PL/SQL の 二
- Oracle读书笔记-----PL/SQL编程(二)之程序流程
- ORACLE之PL/SQL简单基础语法学习(二)
- Oracle学习之二 PL/SQL块编程基础
- ORACLE PL/SQL编程详解之八(二)
- ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素
- ORACLE PL/SQL编程之二:PL/SQL块结构和组成元素
- ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素
- 七种CSS方式让一个容器水平垂直居中
- 详解JS函数重载
- 伪静态
- 第三周项目2-建设“顺序表”算法库
- SSO认证服务器实现原理(一)
- 基于 JetBrains DataGrip 之 Oracle PL/SQL 攻略 (二)
- 从零开始写C# MVC框架之--- 主框架页
- 渐隐渐显轮播/fadeIn()/fadeOut()/左右点击轮播
- copypng emitted errors
- 面向对象——封装
- oracle 函数
- ButterKnife java.lang.ClassCastException: android.view.View cannot be cast to android.app.Activity
- Genymotion模拟器安装Genymotion-ARM-Translation变copy
- 【项目1-顺序表的基本运算】