zoukankan      html  css  js  c++  java
  • oracle pl/sql基本语法

    ---pl/sql编程语言
    ---pl/sql编程语言是对sql语言的扩展,使得sql语言具有过程化编程的特性。
    ---pl/sql编程语言比一般的过程化编程语言,更加灵活高效。
    ---pl/sql编程语言主要用来编写存储过程和存储函数等。
    
    ---声明方法
    ---赋值操作可以使用:= 也可以使用into查询语句赋值
    declare
        i number(2) := 10;
        s varchar2(10) := '小明';
        ena emp.ename%type;---引用型变量
        emprow emp%rowtype;---记录型变量
    begin
        dbms_output.put_line(i); -- 10
        dbms_output.put_line(s); -- 小明
        select ename into ena from emp where empno = 7788;
        dbms_output.put_line(ena); -- SCOTT
        select * into emprow from emp where empno = 7788;
        dbms_output.put_line(emprow.ename || '的工作为:' || emprow.job); -- SCOTT的工作为:ANALYST
    end;
    --- pl/sql中的if判断
    -- 范例 1:如果从控制台输入 1 则输出我是 1
    declare
      pnum number := #
    begin
      if pnum = 1 then
        dbms_output.put_line('我是1');
      end if;
    end;
    -- 范例 2:如果从控制台输入 1 则输出我是 1否则输出我不是 1
    declare
      mynum number := #
    begin
      if mynum = 1 then
        dbms_output.put_line('我是1');
      else
        dbms_output.put_line('我不是1');
      end if;
    end;
    -- 范例 3:判断人的不同年龄段 18岁以下是未成年人,18岁以上 40以下是成年人,40以上是老年人
    declare
      mynum number := #
    begin
      if mynum < 18 then
        dbms_output.put_line('未成年人');
      elsif mynum >= 18 and mynum < 40 then
        dbms_output.put_line('中年人');
      elsif mynum >= 40 then
        dbms_output.put_line('老年人');
      end if;
    end;
    ---pl/sql中的loop循环
    ---用三种方式输出1到10个数字
    ---while循环
    declare
      i number(2) := 1;
    begin
      while i<11 loop
         dbms_output.put_line(i);
         i := i+1;
      end loop;  
    end;
    ---exit循环
    declare
      i number(2) := 1;
    begin
      loop
        exit when i>10;
        dbms_output.put_line(i);
        i := i+1;
      end loop;
    end;
    ---for循环
    declare
    
    begin
      for i in 1..10 loop
         dbms_output.put_line(i);  
      end loop;
    end;

    游标 Cursor

      语法:
        CURSOR 游标名 [ (参数名 数据类型,参数名 数据类型,...)] IS SELECT 语句;
        例如: cursor c1 is select ename from emp;
      游标的使用步骤:
        打开游标: open c1; (打开游标执行查询)
        取一行游标的值:fetch c1 into pjob; (取一行到变量中)
        关闭游标: close c1;(关闭游标释放资源)
        游标的结束方式 exit when c1%notfound
        注意: 上面的 pjob 必须与 emp表中的 job 列类型一致:
        定义:pjob emp.empjob%type;

    ---游标:可以存放多个对象,多行记录。
    ---输出emp表中所有员工的姓名
    declare
      cursor c1 is select * from emp;
      emprow emp%rowtype;
    begin
      open c1;
         loop
             fetch c1 into emprow;
             exit when c1%notfound;
             dbms_output.put_line(emprow.ename);
         end loop;
      close c1;
    end;
    
    -----给指定部门员工涨工资
    declare
      cursor c2(eno emp.deptno%type) 
      is select empno from emp where deptno = eno;
      en emp.empno%type;
    begin
      open c2(10);
         loop
            fetch c2 into en;
            exit when c2%notfound;
            update emp set sal=sal+100 where empno=en;
            commit;
         end loop;  
      close c2;
    end;
    ----查询10号部门员工信息
    select * from emp where deptno = 10;

      for 循环提取游标值

        我们每次提取游标,需要打开游标 关闭游标 循环游标 提取游标 控制循环的退出等等,好麻烦!有没有更简单的写法呢?有!用 for 循环一切都那么简单

    declare
      cursor cur_pricetable(v_ownertypeid number)
      is select * from T_PRICETABLE where ownertypeid=v_ownertypeid;begin   for v_pricetable in cur_pricetable(3)   loop     dbms_output.put_line('价格:'||v_pricetable.price ||'吨位:'||v_pricetable.minnum||'-'||v_pricetable.maxnum );   end loop; end ;
  • 相关阅读:
    Total Video Converter v3.71 注册码
    Web下载文件
    语音朗读
    SQLSERVER 删除重复记录
    Windows8[启用IIS8 asp.net功能]
    黑链代码
    在ASP.NET中防止注入攻击[翻译]
    Oracle 正确删除archivelog文件
    浅谈网站黑链检测和清除的方法
    解密SQLServer2000加密存储过程,函数,触发器,视图
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12344502.html
Copyright © 2011-2022 走看看