惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
G
Google Developers Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
The Blog of Author Tim Ferriss
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
小众软件
小众软件
WordPress大学
WordPress大学
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
美团技术团队
Jina AI
Jina AI
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
D
Docker

博客园 - Angus

多行记录栏位合并 使用ROWNUM实现分页 ROWID and ROWNUM Null 比较 BOM Interface Item Interface WIP表结构 BOM表结构 INV表结构 OM表结构 PO表结构 AR表结构 AP表结构 GL表结构 HR表结构 APPLSYS表结构 Web页面消息框 Oracle ERP中的Flexfield Oracle ERP权限管理
PL/SQL Package
Angus · 2006-08-03 · via 博客园 - Angus

First Step:

create table DEPT
(
  DEPTNO NUMBER(
20) not null,
  DNAME  VARCHAR2(
14),
  LOC    VARCHAR2(
13)
)

Second Step:

create or replace package ShowRecord is-- Author  : ANGUS TANG
  
-- Created : 2006-08-03 15:03:56
  
-- Purpose : Use Cursor
  
  PROCEDURE SHOWALL;
  PROCEDURE SHOWALL2;
  
  PROCEDURE SHOWONE(P_NO IN VARCHAR2); 
  PROCEDURE SHOWONE2(P_NO IN VARCHAR2);
  
  FUNCTION SHOWAUTHOR RETURN VARCHAR2;

end ShowRecord;

Third Step:

create or replace package body ShowRecord is

  PROCEDURE SHOWALL IS
    CURSOR DEPT IS SELECT 

* FROM DEPT;
  BEGIN
    FOR T IN DEPT LOOP
        DBMS_OUTPUT.PUT_LINE(DEPT
%ROWCOUNT);
        DBMS_OUTPUT.PUT_LINE(T.DEPTNO);
        DBMS_OUTPUT.PUT_LINE(T.DNAME);
        DBMS_OUTPUT.PUT_LINE(T.LOC);       
    END LOOP;
  END SHOWALL;
  
  PROCEDURE SHOWALL2 IS
    CURSOR DEPT IS SELECT 
* FROM DEPT;
    T DEPT
%ROWTYPE;
  BEGIN
    IF NOT DEPT
%ISOPEN THEN
      OPEN DEPT;
    END IF;    
    FETCH DEPT INTO T;
    LOOP
      EXIT WHEN DEPT
%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(DEPT
%ROWCOUNT);
        DBMS_OUTPUT.PUT_LINE(T.DEPTNO);
        DBMS_OUTPUT.PUT_LINE(T.DNAME);
        DBMS_OUTPUT.PUT_LINE(T.LOC);      
      FETCH DEPT INTO T;
    END LOOP;     
    IF DEPT
%ISOPEN THEN
      CLOSE DEPT;
    END IF;
  END SHOWALL2;  
  
  PROCEDURE SHOWONE(P_NO IN VARCHAR2) IS
    CURSOR DEPT(NO VARCHAR2) IS SELECT 
* FROM DEPT WHERE DEPTNO=NO;
  BEGIN
    FOR T IN DEPT(P_NO) LOOP
        DBMS_OUTPUT.PUT_LINE(DEPT
%ROWCOUNT);
        DBMS_OUTPUT.PUT_LINE(T.DEPTNO);
        DBMS_OUTPUT.PUT_LINE(T.DNAME);
        DBMS_OUTPUT.PUT_LINE(T.LOC);      
    END LOOP;
  END SHOWONE;
  
  PROCEDURE SHOWONE2(P_NO IN VARCHAR2) IS
    CURSOR DEPT(NO VARCHAR2) IS SELECT 
* FROM DEPT WHERE DEPTNO=NO;   
    T DEPT
%ROWTYPE;
  BEGIN
    IF NOT DEPT
%ISOPEN THEN
      OPEN DEPT(P_NO);
    END IF;    
    FETCH DEPT INTO T;
    LOOP
      EXIT WHEN DEPT
%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(DEPT
%ROWCOUNT);
        DBMS_OUTPUT.PUT_LINE(T.DEPTNO);
        DBMS_OUTPUT.PUT_LINE(T.DNAME);
        DBMS_OUTPUT.PUT_LINE(T.LOC);      
      FETCH DEPT INTO T;
    END LOOP;     
    IF DEPT
%ISOPEN THEN
      CLOSE DEPT;
    END IF;  
  END SHOWONE2;
  
  FUNCTION SHOWAUTHOR RETURN VARCHAR2 IS
  BEGIN
    RETURN 'ANGUS TANG';
  END;
  
end ShowRecord;

Fourth Step:

BEGIN
  ShowRecord.Showall;
END;

BEGIN
  ShowRecord.Showall2;
END;

BEGIN
  ShowRecord.Showone('

11');
END;

BEGIN
  ShowRecord.Showone2('

11');
END;

BEGIN
  DBMS_OUTPUT.PUT_LINE(ShowRecord.Showauthor);
END;

Code Example:ShowRecord.rar