代码拉取完成,页面将自动刷新
面向过程编程语言
-- 语法
DECLARE
-- 声明部分(变量的声明、游标的声明(cursor)、例外的声明(异常))
BEGIN
-- 语句序列(DML语句)
EXCEPTION
-- 例外处理语句
END;
DECLARE
-- 说明变量:char、varchar2、date、number、boolean、long
v_num number;
-- 赋值
v_char varchar2(24) := 'it is good';
BEGIN
-- 赋值
v_num := 10;
-- 拼接结果
dbms_output.put_line('hello, world' || '! v_num=' || v_num || ', v_char=' || v_char);
END;
DECLARE
-- 引用变量:v_name所对应的类型与emp表中ename字段的类型相同
v_name emp.ename%type;
BEGIN
-- 在SQL中使用 into 来赋值
select ename into v_name from emp where empno=7369;
-- 拼接结果
dbms_output.put_line('名字为:' || v_name);
END;
DECLARE
-- 记录型变量
v_row emp%rowtype;
BEGIN
SELECT * INTO v_row FROM emp WHERE empno = 7369;
dbms_output.put_line('名字为:' || v_row.ename);
END;
语法
语法:
[1] IF 条件 THEN
code....;
END IF;
[2] IF 条件 THEN
code....;
ELSE
code....;
END IF;
[3] IF 条件 THEN
code....;
ELSIF 条件 THEN
code...
ELSE
code....;
END IF;
DECLARE
v_date VARCHAR2(24);
BEGIN
SELECT trim(to_char(SYSDATE, 'dy')) INTO v_date FROM dual; -- 当天属于周几
IF v_date IN ('sun', 'sat') THEN
dbms_output.put_line('在中国今天是周末哦!');
ELSE
dbms_output.put_line('在中国今天是工作日哦!');
END IF;
END;
语法
语法:
[1] WHILE 条件
LOOP
code...;
END LOOP;
[2] LOOP
EXIT WHEN 条件
code....
END LOOP;
[3] FOR i IN 1...n
LOOP
code...
END LOOP;
-- 输出1-10
-- 法一:
DECLARE
v_tag NUMBER := 1;
BEGIN
WHILE v_tag < 10
LOOP
dbms_output.put_line(v_tag);
v_tag := v_tag + 1;
END LOOP;
END;
-- 法二:
DECLARE
v_tag NUMBER := 1;
BEGIN
LOOP
EXIT WHEN v_tag >= 10;
dbms_output.put_line(v_tag);
v_tag := v_tag + 1;
END LOOP;
END;
-- 法三:
DECLARE
BEGIN
FOR i IN 1..10
LOOP
dbms_output.put_line(i);
END LOOP;
END;
概念
-- 语法:
CURSOR 游标名 [(paramName paramType, ....)] IS SELECT 语句...;
-- 使用游标方式输出员工编号和姓名
DECLARE
pemp emp%ROWTYPE;
-- 定义游标
CURSOR pc IS SELECT * FROM emp;
BEGIN
-- 打开游标
OPEN pc;
-- 取数据
LOOP
FETCH pc INTO pemp;
EXIT WHEN pc%NOTFOUND;
dbms_output.put_line(pemp.empno || '-' || pemp.ename);
END LOOP;
END;
--输出所有员工的名称与工资
DECLARE
mycursor1 SYS_REFCURSOR;
vrow emp%ROWTYPE;
BEGIN
OPEN mycursor1 FOR SELECT * FROM emp;
LOOP
FETCH mycursor1 into vrow;
EXIT WHEN mycursor1%NOTFOUND;--%notfound,游标中已经取到最后,没有数据了
dbms_output.put_line(' 员工姓名:' || vrow.ename || ' 工资:' || vrow.sal);
END LOOP;
CLOSE mycursor1;
END;
在大学数据库中,一组为了完成特定功能的SQL语句集。经编译后储存在数据库中,用户通过指定的存储过程的名字给出参数来执行它。存储过程是数据库中一个重要的对象,任何一个设计良好的数据库程序都应该要使用到存储过程。
-- 方式一:
CREATE OR REPLACE PROCEDURE 过程名(参数名 IN/OUT 数据类型)
AS
code...
BEGIN
code...
END;
-- 方式二:
CREATE OR REPLACE PROCEDURE 过程名(参数名 IN/OUT 数据类型)
IS
code...
BEGIN
code...
END 过程名;
-- 方式一
CREATE OR REPLACE PROCEDURE pro_t1(tager IN NUMBER) AS
BEGIN
dbms_output.put_line(tager);
END;
CALL pro_t1(23);
-- 方式二
CREATE OR REPLACE PROCEDURE pro_allEmp
IS
v_row emp%rowtype;
begin
SELECT * INTO v_row FROM emp WHERE empno = 7369;
dbms_output.put_line('名字为:' || v_row.ename);
END pro_allEmp;
CALL pro_allEmp();
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。