Oracle PL/SQL程序设计 第五版 上册 第三章 语言基础

          最近看了很多东西,也练习了一些,我发现这东西好像有点进入瓶颈的感觉,这个瓶颈,我觉得是因为时间太短,

练习的还不够多,并且有很多东西都是随意带过弄的。并且最近在学习Python,有些东西还有点混淆了,我决定从新

来一遍这本书,把每一个例子都进行一个学习。


PL/SQL块有匿名的,也有命名的,其实命名就是那些过程、函数、包、触发器、对象类型这些。书中第一个例子是这样的。


insert.sql
CREATE OR REPLACE PROCEDURE get_happy(emp_id_in IN NUMBER)
    AUTHID CURRENT_USER
IS
    l_hiredate DATE;
BEGIN
    l_hiredate := SYSDATE - 2;
    INSERT INTO employees
        (employee_id, hire_date)
    VALUES (emp_id_in, l_hiredate);
EXCEPTION
    WHEN DUP_VAL_ON_INDEX
    THEN
        DBMS_OUTPUT.PUT_LINE(‘Cannot insert.‘);
END;
/

书中的例子其实有点坑,我看着像是安装数据库的时候自带的表中的数据,然后我就按着它的写了,使用hr的账号登录,

一创建就出问题,后来发现根本不是,并且那个错误 DUP_VAL_ON_INDEX,他书中的那个也是错的。


下面是一个匿名块

date.sql
DECLARE
    l_date DATE;
BEGIN
    l_date := SYSDATE - 5;
    DBMS_OUTPUT.PUT_LINE(l_date);
END;
/

我现在还有点不知道怎么调用那个过程,虽然以前试过了,但是没记住。

下面我就自己试着写一个调用的,我写一个打印时间的过程,然后在一个匿名块中调用它。

get_date.sql
CREATE OR REPLACE PROCEDURE get_date(num_in IN NUMBER)
    AUTHID CURRENT_USER
IS
    l_date DATE;
BEGIN
    l_date := SYSDATE - num_in;
    DBMS_OUTPUT.PUT_LINE(l_date);
END;
/

然后匿名块调用

date.sql
BEGIN
    get_date(10);
END;
/

这样就实现了调用,成功输出了,如果你的显示成功但没有输出内容,应该是没有打开输出那个功能。

我是使用sqlplus来运行的这些.sql文件, @   xxx.sql

并且在sqlplus中输入 set serverout on;  使用这个命令打开输出功能。





郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。