PL/SQL中使用DML、游标、动态SQL

本文介绍PL/SQL的基础用法,包括异常处理、return使用、获取指定员工信息等常见操作,并详细讲解了游标的多种使用方式及字符串操作技巧。

先申明我不是牛X,所有有错的地方,希望广大读友能提醒俺一下!

1.两个常用异常处理

DECLARE
  v_empno emp.empno%TYPE;
  v_ename emp.ename%TYPE;
BEGIN
  v_empno:=&请输入工号
  SELECT ename INTO v_ename
  FROM emp e WHERE e.empno!=v_empno;
  dbms_output.put_line(v_ename);
 
  EXCEPTION
    WHEN no_data_found THEN
      dbms_output.put_line('没有数据!');
    WHEN too_many_rows THEN
      dbms_output.put_line('行太多!'); 
END;

2.return使用,隐式游标。自动,用于返回单行结果集

  注意:经俺亲手测试,boolean不能打印输出!

DECLARE
  v_new_sal emp.sal%TYPE;
BEGIN
  UPDATE emp e SET sal=sal+1000
  WHERE e.empno=7788
  RETURN sal INTO v_new_sal;
 
  IF(v_new_sal>=8888)THEN
    ROLLBACK;
    raise_application_error(-20009,'需要请示!');
  END IF;
  COMMIT;
 
  IF(SQL%ISOPEN)THEN
    dbms_output.put_line('ok!');
  ELSE
    dbms_output.put_line('not ok!');
  END IF;     
END;

3.获取指定员工信息(是通过先做判断数据是否存在,后在查询)

DECLARE
  v_empno emp.empno%TYPE;
  v_row emp%ROWTYPE;
  v_count NUMBER(1);
BEGIN
  v_empno:=&请输入工号;
  SELECT COUNT(*) INTO v_count
  FROM emp WHERE empno=v_empno;
 
  IF(v_count=1)THEN           --先判断
    SELECT * INTO v_row FROM emp e
    WHERE e.empno=v_empno;
    dbms_output.put_line(v_row.ename||','||v_row.sal);
  ELSE
    NULL;
  END IF;
END;

4.游标for循环(重点)需要对查询中的每条记录逐一处理时

  例子:输出员工不为7566的信息

BEGIN
  FOR s IN (SELECT * FROM emp WHERE empno!=7566)
  LOOP
    dbms_output.put_line(s.empno||','||s.ename||','||s.sal);
  END LOOP;
END;

5.显示游标,使用cursor游标对象

技巧:dofw [declare-open-fetch-while] (重点

 1)使用cursor游标对象步骤:

①定义游标      declare cursor游标对象名 is (SQL);

②定义行变量    行变量游标对象名%ROWTYPE;

③打开游标      open游标对象名;

④循环游标      fetch 游标对象名 into 行变量;

while(游标对象名%found)

loop...end loop;

⑤关闭游标  close;

 2)示例:打印各部门信息

DECLARE
  CURSOR my_cur IS (SELECT * FROM dept);
  my_row my_cur%ROWTYPE;
BEGIN
  OPEN my_cur;
  FETCH my_cur INTO my_row;  --先获取数据后游标下移
  WHILE(my_cur%FOUND)
  LOOP
    dbms_output.put_line(my_row.deptno||','||my_row.dname);
    FETCH my_cur INTO my_row;
  END LOOP;
  CLOSE my_cur;
END;

6.在PL/SQL里执行字符串操作

  1)execute语句    execute immediate'DDL语句'/ 'select语句'into变量

示例:创建一张表t_53

DECLARE
  v_sql varchar2(4000);  --在PL/SQL操作列时,数值的长度<=4000byte
BEGIN
  v_sql:='create table t_53 (t_id number(2))';
  EXECUTE IMMEDIATE v_sql;
END;

2)执行多行查询(open..for)

①游标变量(游标变量也是变量)

②变量需要定义类型

③类型需要自定义

示例:查询工资大于3000的所有员工编号与名字

DECLARE
  TYPE my_cur_type IS REF CURSOR;                --类型需要自定义,这里的类型是引用游标
  my_cur_var my_cur_type;                                   --变量需要类型
  my_row emp%ROWTYPE;
BEGIN
  OPEN my_cur_var FOR 'select * from emp where sal>=3000';  --游标变量也是变量
  FETCH my_cur_var INTO my_row;                             --后面与显示游标相同
  WHILE(my_cur_var%FOUND)
  LOOP
    dbms_output.put_line(my_row.empno||','||my_row.ename);
    FETCH my_cur_var INTO my_row;
  END LOOP;
  CLOSE my_cur_var;
END;

潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是一套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员与工程实践者提供系统化的潮汐建模与计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程转化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法与潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期与振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构与预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮与天文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库与示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成全流程操作。这套工具集将专业计算能力与人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性与科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值