码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-03-16 09:57:06      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

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

练习的还不够多,并且有很多东西都是随意带过弄的。并且最近在学习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;  使用这个命令打开输出功能。





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

标签:

原文地址:http://my.oschina.net/bxxfighting/blog/387359

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!