Oracle PL/SQL程序设计 第五版 上册 第五章 用循环进行迭代处理

  1. 先是那个最简单的LOOP循环
loop.sql
CREATE OR REPLACE PROCEDURE loop_demo
    AUTHID CURRENT_USER
IS
    l_date DATE;
BEGIN
    l_date := SYSDATE;
    LOOP
        EXIT WHEN l_date > SYSDATE + 10;
        l_date := l_date + 1;
        DBMS_OUTPUT.PUT_LINE(l_date);
    END LOOP;
END loop_demo;
/

首先一点,我这个过程没有参数,那么我在创建那句,后面就没有括号。

还有下面 l_date := l_date + 1;

我开始使用 l_date += 1;   l_date  :+= 1;   l_date ++;我开始试了一下这三种,后来都不成功,

才改成了现在这样的格式,看来是不支持。

BEGIN
    loop_demo();
END;
/

这样直接执行就可以看看结果了。

2. 然后是简单的for循环,使用数值的。

for.sql
CREATE OR REPLACE PROCEDURE for_demo
    AUTHID CURRENT_USER
IS
    l_date DATE;
BEGIN
    FOR i IN 1 .. 10
    LOOP
        l_date := SYSDATE + i;
        DBMS_OUTPUT.PUT_LINE(l_date);
    END LOOP;
END for_demo;
/

然后还可以使用游标的。

先用一个select语句来当IN的集合

CREATE OR REPLACE PROCEDURE for_select
    AUTHID CURRENT_USER
IS
BEGIN
    FOR cur IN (SELECT ENAME FROM EMP)
    LOOP
        DBMS_OUTPUT.PUT_LINE(cur.ename);
    END LOOP;
END;
/

3. 下面是while的练习

CREATE OR REPLACE PROCEDURE while_demo
    AUTHID CURRENT_USER
IS
    l_date DATE;
BEGIN
    l_date := SYSDATE;
    WHILE l_date < SYSDATE + 15
    LOOP
        l_date := l_date + 1;
        DBMS_OUTPUT.PUT_LINE(l_date);
    END LOOP;
END while_demo;
/

然后我在书中看到了sleep函数,这个我就想试试,但是跟我想的结果不一样。

CREATE OR REPLACE PROCEDURE while_demo
    AUTHID CURRENT_USER
IS
    l_date DATE;
BEGIN
    l_date := SYSDATE;
    WHILE l_date < SYSDATE + 15
    LOOP
        l_date := l_date + 1;
        DBMS_OUTPUT.PUT_LINE(l_date);
        DBMS_LOCK.sleep(1);
    END LOOP;
END while_demo;
/

首先要用DBMS_LOCK需要有权限。在管理员下

grant execute on DBMS_LOCK to scott;

我以为是每循环一次停一下,但是实际情况却是,一直在停着,停到了15秒后,才全部打印出来。

这个是怎么回事呢?

还有一个就是下面有一个用管道的,但是我就没有成功过,一直都是在卡着,不会退出,并且明明给了sleep时间应该过了。

DECLARE
    pipename CONSTANT VARCHAR2(12) := ‘signaler1‘;
    result INTEGER;
    pipebuf VARCHAR2(64);
BEGIN
    result := DBMS_PIPE.create_pipe(pipename);
    LOOP
        DBMS_LOCK.sleep(5);
        IF DBMS_PIPE.receive_message(pipename, 0) = 0
        THEN
            DBMS_PIPE.unpack_message(pipebuf);
            EXIT WHEN pipebuf = ‘stop‘;
        END IF;
    END LOOP;
END;
/

在这里有过一个问题,我当时给scott那个DBMS_PIPE的权限后,忘了进入这个用户了,直接用sys就运行了,然后退出再

用scott运行就不行了,报错,后来应该是用sys的时候把个管道创建了,scott用不上这个了就。后来我改了另一个名字。

但是,我的为什么就不能退出呢。。。

DECLARE
    pipename VARCHAR2(12) := ‘signaler1‘;
    result INTEGER := DBMS_PIPE.create_pipe(pipename);
BEGIN
    DBMS_PIPE.pack_message(‘stop‘);
END;
/

这个是那个停止的,但是不好用。在找问题。

时间: 2024-10-02 23:13:40

Oracle PL/SQL程序设计 第五版 上册 第五章 用循环进行迭代处理的相关文章

oracle pl/sql 程序设计 历史笔记整理

20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/[email protected]:1521/orcl 在java中调用存储过程: create or replace procedure t_p(l_in in out number) is begin l_in := 5; end; @Test public void test() throws SQLException { DataSource ds = Dat

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

最近看了很多东西,也练习了一些,我发现这东西好像有点进入瓶颈的感觉,这个瓶颈,我觉得是因为时间太短, 练习的还不够多,并且有很多东西都是随意带过弄的.并且最近在学习Python,有些东西还有点混淆了,我决定从新 来一遍这本书,把每一个例子都进行一个学习. PL/SQL块有匿名的,也有命名的,其实命名就是那些过程.函数.包.触发器.对象类型这些.书中第一个例子是这样的. insert.sql CREATE OR REPLACE PROCEDURE get_happy(emp_id_in IN NU

Oracle PL/SQL程序设计 第五版 上册 第四章 条件和顺序控制

这一章的练习使用,那个scott下的emp表进行. 先使用IF / END IF; if.sql CREATE OR REPLACE PROCEDURE get_sal(emp_no_in IN NUMBER)     AUTHID CURRENT_USER IS     l_sal NUMBER; BEGIN     SELECT sal INTO l_sal     FROM emp     WHERE empno = emp_no_in;     IF l_sal > 2000     T

Oracle PL/SQL程序设计 第五版 上册 第八章 字符串

第七章 东西也挺杂的,看了不太清楚.虽然看完了,但是觉得没有获得太多东西,还得回去看. 看到了这个CHR函数, 原来就是把数字转成ASCII码,比如CHR(10)就是回车. BEGIN     DBMS_OUTPUT.PUT_LINE('gogo' || CHR(10) || 'tot'); END; / 这里使用||来连接字符,也可以使用CONCAT来连接.不过CONCAT只有两个参数,也就是连接两个字符串.

Oracle PL/SQL程序设计 第五版 上册 第十章 日期

DATE:  到秒 TIMESTAMP:  到十亿分之一秒 这两个一样,但是精度不同,. CURRENT_DATE  会话的时区  返回DATE CURRENT_TIMESTAMP   会话的时区,返回TIMESTAMP WITH TIME ZONE LOCALTIMESTAMP  会话时区   返回TIMESTAMP SYSDATE  服务器时区,返回DATE SYSTIMESTAMP  服务器时区,返回TIMESTAMP WITH TIME ZONE

Oracle.PL.SQL.程序设计笔记 day01

自定义变量 variable x varchar(20) 注:在变量x前加冒号,是表示这是一个变量. 设置了x变量,当CMD窗口关闭后,变量失效. [glogin.sql] D:\app\Administrator\product\11.2.0\dbhome_1\sqlplus\admin\glogin.sql ---- Copyright (c) 1988, 2005, Oracle.  All Rights Reserved.---- NAME--   glogin.sql---- DESC

oracle PL/SQL程序设计

declare 说明部分    (变量说明,光标申明,例外说明 ] begin 语句序列   (DML语句]… exception 例外处理语句 End; / if语句 循环语句 光标(Cursor)==ResultSet l说明光标语法: CURSOR  光标名  [ (参数名  数据类型[,参数名 数据类型]...)] IS  SELECT   语句; l用于存储一个查询返回的多行数据 l打开光标:                 open c1;    (打开光标执行查询) l取一行光标的

《Python学习手册 第五版》 -第16章 函数基础

前面的章节讲解的是一些基础数据类型.基本语句使用和一些文档查看的内容,这些都是一些基础,其实还谈不上入门,只有了解了函数,才算入门 函数是编程里面使用最多的也是最基本的程序结构, 本章重点内容 1.函数 1)什么是函数? 2)为什么使用函数? 2.编写函数 1)函数的基本格式 2)定义和调用函数 3)函数的多态.局部变量 接下来针对本章重点,展开详细的说明 1.函数 1)什么是函数? 这里没有严格的定义,用通俗易懂的方式来说: 函数就是将一些语句集合在一起的组件,从而让他们能够不止一次的在程序中

学习《Oracle PL/SQL 实例讲解 原书第5版》----创建账户

通过readme.pdf创建student账户. 以下用sys账户登录时都是sysdba. 一.PL/SQL 登录oracle. SYS/123  AS SYSDBA 账户名:sys:密码:123:作为sysdba角色登录. 二.查询DEFAULT TABLESPACE和TEMPORIRY TABLESPACE. SELECT tablespace_name FROM dba_tablespaces ORDER BY tablespace_name; 注:tablespaces are area