Oracle PLSQL:

PLSQL:
  符号:
    赋值: :=

  基本示例:

        set serveroutput on   //设置输出打开.
        declare
          --说明部分

        begin
          --程序
          dbms_output.put_line(‘Hello World‘);
        exception

        end;
        /

  引用型变量:
    --查询7839的姓名和薪水

        --查询7839的姓名和薪水
        set serveroutput on

        declare
          --定义变量保存姓名和薪水
          --pename varchar2(20);
          --psal   number;
          pename emp.ename%type;      //引用型变量
          psal   emp.sal%type;      
        begin
          --得到姓名和薪水
          select ename,sal into pename,psal from emp where empno=7839;

          dbms_output.put_line(pename||‘的薪水是‘||psal);
        end;
        /

  记录型变量(代表了一行,多个列,类似数组)
    --查询7839的姓名和薪水

        set serveroutput on

        declare
          --定义记录型变量:代表一行
          emp_rec emp%rowtype;
        begin
          select * into emp_rec from emp where empno=7839;
          dbms_output.put_line(emp_rec.ename||‘的薪水是‘||emp_rec.sal);
        end;
        /

  IF语句
    --判断用户从键盘输入的数字

        set serveroutput on

        --接收键盘输入
        --num: 地址值,在该地址上 保存了输入的值
        accept num prompt ‘请输入一个数字‘;  //accept 命令

        declare
          --定义变量保存输入的数字
          pnum number := #            //从地址上取出数字 使用 &
        begin
          if pnum = 0 then dbms_output.put_line(‘您输入的是0‘);
            elsif pnum = 1 then dbms_output.put_line(‘您输入的是1‘);
            elsif pnum = 2 then dbms_output.put_line(‘您输入的是2‘);
            else dbms_output.put_line(‘其他数字‘);
          end if;
        end;
        /

  循环语句(共有三种方式,此处举例一种):
    --打印1~10

        set serveroutput on

        declare
          pnum number := 1;
        begin
          loop
            --退出条件
            exit when pnum > 10;

            dbms_output.put_line(pnum);
            --加一
            pnum := pnum + 1;
          end loop;
        end;
        /

  Cursor:光标(相当一个resultset, 结果集):
    1. 光标的属性:
      %isopen      %rowcount (影响的行数)
      %found        %notfound
    2. 默认,一个会话中只能打开300个光标
                show parameter cursor //查看参数 --->后面两个都是这里查来的
      修改: alter system/session set open_cursors=400;

    3. cursor_sharing ---> 性能优化
      EXACT(默认),   FORCE(提性能),   SIMILAR

    例子:
      --查询并打印员工的姓名和薪水(不带参数)

            set serveroutput on

            declare
              --定义光标
              cursor cemp is select ename,sal from emp; //定义一个光标
              pename emp.ename%type;
              psal   emp.sal%type;
            begin
              --打开光标
              open cemp;                            //打开一个光标

              loop
                --取一条记录
                fetch cemp into pename,psal;        //取出一个记录
                --退出条件
                --exit when 没有取到记录;
                exit when cemp%notfound;

                dbms_output.put_line(pename||‘的薪水是‘||psal);

              end loop;

              --关闭光标
              close cemp;                            //关闭光标
            end;
            /

    例二(带参数):
      --查询某个部门的员工姓名

            set serveroutput on

            declare
              cursor cemp(dno number) is select ename from emp where deptno=dno;
              pename emp.ename%type;
            begin
              open cemp(20);     //传参
              loop
                fetch cemp into pename;
                exit when cemp%notfound;

                dbms_output.put_line(pename);

              end loop;
              close cemp;
            end;
            /

exception(例外)
  系统例外:
    No_data_found (没有找到数据)
    Too_many_rows (select into 语句匹配多个行)
    Zero_Divide (被 0 除)
    Value_error (算数或者转换异常)
    Timeout_on_resource (等待资源超时)

    --被0除
    

                set serveroutput on

                declare
                  pnum number;
                begin
                  pnum := 1/0;

                exception
                  when zero_divide then dbms_output.put_line(‘1:0不能做分母‘);
                                         dbms_output.put_line(‘2:0不能做分母‘);
                  when value_error then dbms_output.put_line(‘算术或者转换错误‘);
                  when others then dbms_output.put_line(‘其他例外‘);
                end;
                /

  自定义例外:
    --查询50号部门的员工姓名

                set serveroutput on

                declare
                  cursor cemp is select ename from emp where deptno=50;
                  pename emp.ename%type;

                  --自定义例外
                  no_emp_found exception;   //定义一个 例外 类型的变量
                begin
                  open cemp;

                  --取第一条记录
                  fetch cemp into pename;

                  if cemp%notfound then
                    --抛出例外
                    raise no_emp_found;    //抛出例外
                  end if;

                  --pmon: process monitor
                  close cemp;

                exception      //一般处理是保存到一个表中
                  when no_emp_found then dbms_output.put_line(‘没有找到员工‘);
                  when others then dbms_output.put_line(‘其他例外‘);
                end;
                /
时间: 2025-01-02 14:03:53

Oracle PLSQL:的相关文章

Oracle&PLSQL 安装及乱码问题解决

1,先到Oracle网站下载Instant Client ,如果有老版本,就不用下载了 下载回是一个压缩文件,解压之后的文件夹叫:D:/instantclient_11_2.放在你喜欢的目录即可.例如:D:/instantclient_11_2 2. 2.在D:/instantclient_11_2目录下新建目录network,在network目录下再新建admin目录,在admin目录下新建文件tnsnames.ora,使用文本编辑器打开写入如下内容: MWDB=(DESCRIPTION = 

oracle Plsql 运行update或者delete时卡死问题解决的方法

oracle Plsql 运行update或者delete时 遇到过Plsql卡死问题或者导致代码运行sql的时候就卡死. 在开发中遇到此问题的时候,本来把sql复制出来,在plsql中运行,Sql本身拼写无误,可是出现plsql卡死的情况, 在代码中,运行sql的地方打断点debug,发现运行sql,仍然没有响应.经过网上查资料,推測导致这样的情况的原因是 可能在PLSQL Developer运行update时没有commit,oracle将该条记录锁住了. 能够通过下面办法解决: 先查询锁定

MyEclipse+Weblogic+Oracle+PLSQL配置注意事项

Weblogic配置详情:<Weblogic安装与配置图文详解>Oracle+PLSQL配置详情:<PL/SQL访问远程Oracle服务器(多种方式)>MyEclipse配置:<Eclipse在开发Web项目时的配置优化>,<教你破解MyEclipse到2016年[图文详解]>虽然总结过以上开发环境的配置及优化,但是在使用的过程中依旧出现了或多或少.大大小小的问题,统一记录一下.1.MyEclipse导入工程.File-->Import-->Ge

Oracle/PLSQL: LENGTH Function-from cyber

Oracle/PLSQL: LENGTH Function This Oracle tutorial explains how to use the Oracle/PLSQL LENGTH function with syntax and examples. Description The Oracle/PLSQL LENGTH function returns the length of the specified string. Syntax The syntax for the LENGT

Oracle/PLSQL: LPAD Function-from cyber

Oracle/PLSQL: LPAD Function This Oracle tutorial explains how to use the Oracle/PLSQL LPAD function with syntax and examples. Description The Oracle/PLSQL LPAD function pads the left-side of a string with a specific set of characters (when string1 is

Oracle PLSQL 实例精解 中文版pdf

下载地址:网盘下载 <Oracle PLSQL 实例精解>是一本逐步分解的,详尽的pl/sql编程教程,使用真实场景的试验.范例和练习来介绍读者所需的pl/sql编程技能,涵盖oracle 11g的最新特性.作者的写作手法源自于在哥伦比亚大学教授pl/sql编程技术的经验,深度探索pl/sql编程技术,融合自己的最佳实践.使用本书,读者可以快速掌握pl/sql编程基本知识,并建立工程化的概念,是市面上难得的pl/sql教程.下载地址:网盘下载

oracle Plsql 执行update或者delete时卡死问题解决办法

oracle Plsql 执行update或者delete时 遇到过Plsql卡死问题或者导致代码执行sql的时候就卡死. 在开发中遇到此问题的时候,本来把sql复制出来,在plsql中执行,Sql本身拼写无误,但是出现plsql卡死的情况, 在代码中,执行sql的地方打断点debug,发现执行sql,仍然没有响应.经过网上查资料,猜测导致这种情况的原因是 可能在PLSQL Developer执行update时没有commit,oracle将该条记录锁住了. 可以通过以下办法解决: 先查询锁定记

Oracle/PLSQL CURSOR FOR Loop

Oracle/PLSQL: CURSOR FOR Loop The syntax for the CURSOR FOR Loop is: FOR record_index in cursor_nameLOOP      {.statements.}END LOOP; You would use a CURSOR FOR Loop when you want to fetch and process every record in a cursor. The CURSOR FOR Loop wil

Oracle/PLSQL WHERE CURRENT OF Statement

Oracle/PLSQL: WHERE CURRENT OF Statement If you plan on updating or deleting records that have been referenced by a Select For Update statement, you can use the Where Current Of statement. 译:如果你想删除或者更新被Select For Update引用的记录,你可以使用Where Current Of语句.

本地不安装Oracle,plsql远程连接数据库

由于Oracle的庞大,有时候我们需要在只安装Oracle客户端如plsql.toad等的情况下去连接远程数据库,可是没有安装Oracle就没有一切的配置文件去支持.最后终于发现一个很有效的方法,Oracle的Instantclient工具包可以很好地解决这个问题,而且小而方便.1.首先到Oracle网站下载Instant Client : http://www.oracle.com/us/solutions/index-097480.html 解压之后的文件夹叫:instantclient_1