arc values return roc 保存 记录 open 换行 all
--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循环
--1.2if语句
DECLARE
i INTEGER :=1;
j INTEGER :=10;
BEGIN
FOR S IN i .. j LOOP
DBMS_OUTPUT.put_line('序号是'||S);
END LOOP;
END;
IF chengji>90 THEN --注意不需要';'号
DECLARE
chengji integer;
BEGIN
chengji :=&temp;
DBMS_OUTPUT.put_line('您输入的成绩是:'||chengji);
DBMS_OUTPUT.put_line('优秀');
ELSIF chengji>=60 THEN --注意不是ELSEIF
--1.3while循环
DBMS_OUTPUT.put_line('及格');
ELSE
DBMS_OUTPUT.put_line('不及格');
END IF;
END;
--1.4do whlie 循环
DECLARE
chengji integer :=10;
BEGIN
WHILE chengji>0 LOOP
DBMS_OUTPUT.put_line(chengji);
chengji :=chengji-1;
END LOOP;
END;
--1.5case 语句
DECLARE
i INTEGER :=12;
BEGIN
LOOP
DBMS_OUTPUT.put_line(i);
i:=i-1;
EXIT WHEN i=0;
END LOOP;
END;
SELECT I.STU_ID 学号,
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;
--1.6 GOTO 语句
(CASE I.STU_SEX
WHEN '男' THEN
'1'
WHEN '女' THEN
'0'
ELSE
'未知'
END)
FROM STU_INFO I;
--创建节点,跳转到指定节点
--2.SELECT INTO 的用法.统计学生信息表中的学生总数
DECLARE
BEGIN
<<a>>
DBMS_OUTPUT.put_line('A');
goto c;
<<b>>
DBMS_OUTPUT.put_line('B');
<<c>>
DBMS_OUTPUT.put_line('C');
END;
--select into 将查询到的结果赋给变量
SELECT COUNT(*) INTO TEMP FROM (SELECT DISTINCT STU_ID FROM STU_INFO);--查询学生信息记录条总数
DECLARE
TEMP INTEGER;
us_name VARCHAR(20);
BEGIN
DBMS_OUTPUT.put_line('总记录条数有'||TEMP||'条');
SELECT I.STU_NAME INTO us_name FROM STU_INFO I WHERE I.STU_ID='180301';--查询指定账号的学生姓名
--3.cursor 利用游标读取数据 遍历一个记录集
DBMS_OUTPUT.put_line('姓名是:' || us_name);
END;
--%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.若该游标未打开则打开该游标
LOOP --d.利用循环让游标读取数据
DBMS_OUTPUT.put_line('游标已被打开');
END IF;
FETCH youbiao1 INTO temp;
EXIT WHEN youbiao1%NOTFOUND;--e.当记录读取完毕跳出循环
CLOSE youbiao1;--f.关闭游标
DBMS_OUTPUT.put_line(temp.STU_NAME);
END LOOP;
--4.异常处理
DBMS_OUTPUT.put_line('游标已关闭');
END;
aa:=1/0;--函数执行
DECLARE
aa INTEGER;
BEGIN
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;
*/
--创建无参数函数
SELECT F_WUCANSHU FROM DUAL;--函数的调用
CREATE OR REPLACE FUNCTION F_WUCANSHU RETURN INTEGER
IS
BEGIN
RETURN 3+6;
END F_WUCANSHU;
--创建有参函数
SELECT F_YOUCANSHU(&数字1,&数字2) 乘积是 FROM DUAL;--调用有参函数
CREATE OR REPLACE FUNCTION F_YOUCANSHU(num1 INTEGER,num2 INTEGER) RETURN INTEGER
IS
BEGIN
RETURN (num1*num2);
END F_YOUCANSHU;
--创建函数 按照用户输入的学生学号查询该学生的姓名信息
CREATE OR REPLACE FUNCTION F_SEARCH_NAME(stu_id VARCHAR) RETURN VARCHAR
--注意参数的声明不带长度,如:(stu_id VARCHAR)
SELECT DISTINCT STU_NAME INTO temp FROM STU_INFO WHERE STU_ID=stu;--将查询到的学号保存到变量temp中
IS
temp VARCHAR(20);
stu VARCHAR(20);
BEGIN
stu:=stu_id;
RETURN temp;--将结果返回
END F_SEARCH_NAME;
SELECT F_SEARCH_NAME('&请输入要查询的学号') 查询结果 FROM DUAL;
--三,过程的创建和使用
--完成数据库中特定的任务,可以永久保存在数据库中供其他程序使用
--3.1过程创建的基本格式
stu_id IN VARCHAR,--注意在声明参数的类型时不加长度 与函数的参数声明(canshu VARCHAR)不同
/*CREATE [OR REPLACE] PROCEDURE PRO_NAME
[参数名 IN 参数类型, ... 参数N IN 参数N的类型]
IS
BEGIN
//过程要执行的代码体
END;
*/
CREATE OR REPLACE PROCEDURE insert_stuinfo(
INSERT INTO STU_INFO VALUES(stu_id,stu_name,stu_class,stu_sex);--过程要执行的SQL语句块
stu_name IN VARCHAR,
stu_class IN VARCHAR,
stu_sex IN VARCHAR
)
IS
BEGIN
END;
CALL insert_stuinfo('jie','jie','jie','jie');--存储过程的调用
PL/SQL 函数和过程的创建和调用的基础语法
来源: http://www.bubuko.com/infodetail-2463782.html