PL/SQL函数和过程的创建和调用的基础语法

--PL/SQL基础知识学习
--一、PL/SQL语句块,基础语法格式
DECLARE
  --变量声明列表
  info varchar(25); --变量声明
  stu_unm integer := 15;
BEGIN
  --语句块
  info := ‘soulsjie‘; --变量的赋值
  DBMS_OUTPUT.put(‘HELLO WORLD!‘); --输出不换行
  DBMS_OUTPUT.put_line(info || stu_unm); --输出换行 ||为字符串的连接符
  --异常处理块
END;

--1.循环
--1.1for循环
DECLARE
i INTEGER :=1;
j INTEGER :=10;
BEGIN
  FOR S IN i .. j LOOP
   DBMS_OUTPUT.put_line(‘序号是‘||S);
    END LOOP;
END;

--1.2if语句
DECLARE
chengji integer;
BEGIN
  chengji :=&temp;
  DBMS_OUTPUT.put_line(‘您输入的成绩是:‘||chengji);
  IF chengji>90 THEN  --注意不需要‘;’号
    DBMS_OUTPUT.put_line(‘优秀‘);
    ELSIF chengji>=60 THEN  --注意不是ELSEIF
      DBMS_OUTPUT.put_line(‘及格‘);
      ELSE
        DBMS_OUTPUT.put_line(‘不及格‘);
        END IF;
END;

--1.3while循环
DECLARE
chengji integer :=10;
BEGIN
  WHILE chengji>0 LOOP
    DBMS_OUTPUT.put_line(chengji);
    chengji :=chengji-1;
    END LOOP;
END;

--1.4do whlie 循环
DECLARE
i INTEGER :=12;
BEGIN
  LOOP
     DBMS_OUTPUT.put_line(i);
     i:=i-1;
     EXIT WHEN i=0;
    END LOOP;
  END;

--1.5case 语句
DECLARE
i VARCHAR(20);
BEGIN
   i :=‘&temp‘;
    CASE i
    WHEN ‘y‘ THEN DBMS_OUTPUT.put_line(‘您选择了是‘);
    WHEN ‘n‘ THEN DBMS_OUTPUT.put_line(‘您选择了否‘);
    ELSE DBMS_OUTPUT.put_line(‘默认项‘);
    END case;
  END;

   SELECT I.STU_ID 学号,
          (CASE I.STU_SEX
            WHEN ‘男‘ THEN
             ‘1‘
             WHEN ‘女‘ THEN
               ‘0‘
            ELSE
              ‘未知‘
          END)
     FROM STU_INFO I;

--1.6 GOTO 语句
--创建节点,跳转到指定节点
DECLARE
BEGIN
  <<a>>
  DBMS_OUTPUT.put_line(‘A‘);
  goto c;
  <<b>>
  DBMS_OUTPUT.put_line(‘B‘);
  <<c>>
  DBMS_OUTPUT.put_line(‘C‘);
  END;

  --2.SELECT INTO 的用法。统计学生信息表中的学生总数
  --select into 将查询到的结果赋给变量
  DECLARE
  TEMP INTEGER;
  us_name VARCHAR(20);
  BEGIN
   SELECT COUNT(*) INTO TEMP FROM (SELECT DISTINCT STU_ID FROM STU_INFO);--查询学生信息记录条总数
   DBMS_OUTPUT.put_line(‘总记录条数有‘||TEMP||‘条‘);
   SELECT I.STU_NAME INTO us_name FROM STU_INFO I WHERE I.STU_ID=‘180301‘;--查询指定账号的学生姓名
   DBMS_OUTPUT.put_line(‘姓名是:‘||us_name);
  END;

   --3.cursor 利用游标读取数据  遍历一个记录集
   --%ISOPEN(游标是否已经打开)   /%FOUND(遍历到数据)   /%NOTFOUND(未遍历到数据)    /%ROWCOUNT(遍历到数据的记录条数)
   DECLARE
   CURSOR youbiao1 IS SELECT * FROM STU_INFO I WHERE I.STU_SEX=‘男‘; --a.创建一个游标
   temp youbiao1%rowtype;--b.创建一个变量  记录每行内容
   BEGIN
     IF NOT youbiao1%ISOPEN THEN OPEN youbiao1;--c.若该游标未打开则打开该游标
       DBMS_OUTPUT.put_line(‘游标已被打开‘);
     END IF;
     LOOP --d.利用循环让游标读取数据
       FETCH youbiao1 INTO temp;
        EXIT WHEN youbiao1%NOTFOUND;--e.当记录读取完毕跳出循环
        DBMS_OUTPUT.put_line(temp.STU_NAME);
       END LOOP;
       CLOSE youbiao1;--f.关闭游标
        DBMS_OUTPUT.put_line(‘游标已关闭‘);
     END;

     --4.异常处理
     DECLARE
     aa INTEGER;
     BEGIN
       aa:=1/0;--函数执行
       EXCEPTION WHEN OTHERS THEN--异常处理块
          DBMS_OUTPUT.put_line(‘出现异常!‘);
       END;

--二、函数的创建和使用
/*基本格式
CREATE [OR REPLACE] FUNCTION FUN_NAME [(参数1 参数类型, 参数2 参数类型, 参数n 参数类型)]
RETURN 返回值类型
IS
BEGIN
  函数体
  RETURN 具体的返回值;
  END FUN_NAME;
*/
--创建无参数函数
CREATE OR REPLACE FUNCTION F_WUCANSHU RETURN INTEGER
IS
BEGIN
  RETURN 3+6;
  END F_WUCANSHU;
SELECT F_WUCANSHU FROM DUAL;--函数的调用

--创建有参函数
CREATE OR REPLACE FUNCTION F_YOUCANSHU(num1 INTEGER,num2 INTEGER) RETURN INTEGER
IS
BEGIN
  RETURN (num1*num2);
  END F_YOUCANSHU;
SELECT F_YOUCANSHU(&数字1,&数字2) 乘积是 FROM DUAL;--调用有参函数

--创建函数 按照用户输入的学生学号查询该学生的姓名信息
CREATE OR REPLACE FUNCTION F_SEARCH_NAME(stu_id VARCHAR) RETURN VARCHAR
--注意参数的声明不带长度,如:(stu_id VARCHAR)
IS
temp VARCHAR(20);
stu VARCHAR(20);
BEGIN
  stu:=stu_id;
  SELECT DISTINCT STU_NAME INTO temp FROM STU_INFO WHERE STU_ID=stu;--将查询到的学号保存到变量temp中
  RETURN temp;--将结果返回
  END F_SEARCH_NAME;
SELECT F_SEARCH_NAME(‘&请输入要查询的学号‘) 查询结果 FROM DUAL;

--三、过程的创建和使用
--完成数据库中特定的任务,可以永久保存在数据库中供其他程序使用
--3.1过程创建的基本格式
/*CREATE [OR REPLACE] PROCEDURE PRO_NAME
[参数名 IN 参数类型, ... 参数N IN 参数N的类型]
IS
BEGIN
  //过程要执行的代码体
  END;
*/
CREATE OR REPLACE PROCEDURE insert_stuinfo(
stu_id IN VARCHAR,--注意在声明参数的类型时不加长度 与函数的参数声明(canshu VARCHAR)不同
stu_name IN VARCHAR,
stu_class IN VARCHAR,
stu_sex IN VARCHAR
)
IS
BEGIN
  INSERT INTO STU_INFO VALUES(stu_id,stu_name,stu_class,stu_sex);--过程要执行的SQL语句块
  END;
CALL insert_stuinfo(‘jie‘,‘jie‘,‘jie‘,‘jie‘);--存储过程的调用

原文地址:https://www.cnblogs.com/soulsjie/p/8297648.html

时间: 2024-10-23 12:52:30

PL/SQL函数和过程的创建和调用的基础语法的相关文章

Oracle 11g 的PL/SQL函数结果缓存

模仿Oracle性能诊断艺术中的例子做了两个试验,书上说如果不用RELIES_ON,则函数依赖的对象发生的变更操作就不会导致结果缓存的失效操作(result_cache RELIES_ON(test1,test2)),试验证明不对,函数f1()并没有使用RELIES_ON,但表上的变化影响到了函数. C:\Documents and Settings\guogang>sqlplus gg_test/[email protected]_gg SQL*Plus: Release 10.2.0.1.0

Oracle基础(五)pl/sql进阶(分页过程)

编写分页过程 通过pl/sql实现分页过程,再该过程中由简单到难一步步深入,目的在于通过该案例熟悉pl/sql的各种存储过程,包,游标,如何在java中调用等内容的学习. 1.无返回值的存储过程 例如 1.可以向book表添加书, ---建表 Create table book(bookId number,bookName varchar2(50),publishHouse varchar2(50)); --编写过程 in 表示变量为输入值,如果不写默认为输入值,而不是输出变量,out为输出值

PL/SQL 包的概念及创建使用

包1:概念包是一组过程.函数.变量.常量和游标等元素的组合.是对这些PL/SQL 程序设计元素的封装.其中变量相当于类中的成员变量,过程和函数相当于类方法.把相关的模块归类成包,可使开发人员利用面向对象的方法进行存储过程的开发.2:包的组成部分: (1)包定义(PACKAGE):包定义部分声明包内数据类型.变量.常量.游标.子程序和异常错误处理等元素,这些元素为包的公有元素. (2)包主体(PACKAGE BODY):包主体则是包定义部分的具体实现,它定义了包定义部分所声明的游标和子程序,在包主

ORACLE PL/SQL 实例精解之第二章 通用编程语言基础

通用编程语言基础 2.1PL/SQL编程基础 1. 字符类型:支持四中类型字符:字母,数字,符号和空格,组合一个或多个字符就会创建一个词汇单元 2. 词汇单元 a.标识符必须以字符开头 b.保留字是pl/sql专用词 c. 定界符只对pl/sql有特殊含义的字符(算数操作和引号) d.注解单行(--)多行(/**/) 2.1.1 利用语言组件 字符类和词汇单元相当于字母和拼写单词 2.1.2 利用PL/SQL变量 a v_a 和V_A是相同的变量名,PL/SQL不区分大小写 b. 可以使用coa

PL/SQL: Statement ignored 异常 关于存储过程的调用

C:\Java\jdk8\bin\java -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\Installed\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar=3706:D:\Installed\IntelliJ IDEA 2017.3.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\Installed\IntelliJ IDEA 2017

储存过程 (创建,调用,查询,删除)

创建语法: DELIMITER $$  #自定义结束符 CREATE PROCEDURE 储存过程(参数列表) Begin 储存过程体: End $$  #用自定义$$结束代码 DELIMITER:创建储存完毕在修改回来 分号是结束符,在dos窗口了:会结算剩余代码,为了保证储存过程是完整的,需要使用delimiter自定义结束符 调用语法: Call 储存过程名(参数): 查询语法: 查询数据库当前所有的存储过程:show procedure status 查询数据库指定的存储过程:show

oracle pl/sql 函数

函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句.而在函数体内必须包含return语句返回的数据.我们可以使用create function来建立函数. 1).接下来通过一个案例来模拟函数的用法 --输入雇员的姓名,返回该雇员的年薪CREATE FUNCTION annual_incomec(uname VARCHAR2)RETURN NUMBER IS annual_salazy NUMBER(7,2);BEGIN SELECT a.sal*13 INTO annual

pl/sql 函数及与存储过程的区别

函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句.而在函数体内必须包含return语句返回的数据.我们可以使用create function来建立函数. 1).接下来通过一个案例来模拟函数的用法 --输入雇员的姓名,返回该雇员的年薪CREATE FUNCTION annual_incomec(uname VARCHAR2)RETURN NUMBER IS annual_salazy NUMBER(7,2);BEGIN SELECT a.sal*13 INTO annual

Oracle PL/SQL块之过程

1.简介 过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out),通过在过程中使用输入参数,可以将数据传递到执行部分,通过使用输出参数,可以将执行部分的数据传递到应用环境,在sql/plus中通过create procedure来创建过程. 下面通过scott方案(scott方案是oracle数据库自带的一个方案,在实现下面的代码前,请确保该方案可用,也就是scott用户被解锁)来实现一个案例: 1.1.编写一个过程,通过输入用户名和新的年薪,来修改雇员原