壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2885|回复: 8

(转贴)form中用存储过程作为数据源

[复制链接]
发表于 2007/11/14 11:47:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
有兴趣的同学可以试下!
创建后台程序包,构造数据源并对FORMS数据相关操作进行定义,包括:Execute/Insert/Update/Delete/Update和查询返回记录数

/***********************************************脚本举例*******************************************************/
------------------------------------------------
--创建测试数据表
------------------------------------------------
create table Bonus(
        empno        number primary key,
        ename        varchar2(50),
        job        varchar2(20),
        sal        number,
        comm        number);

------------------------------------------------
--创建存储过程程序包
------------------------------------------------
create or replace package Bonus_pkg
is
        ------------------------------------------------
        --创建全局游标变量类型,用于返回记录操作
        ------------------------------------------------
        type Bonus_rec is record(
                empno        Bonus.empno%type,
                ename        Bonus.ename%type,
                job        Bonus.job%type,
                sal        Bonus.sal%type,
                comm        Bonus.comm%type);

        ------------------------------------------------
        --创建全局CURSOR类型,用于构造数据源
        ------------------------------------------------
        type b_cursor is ref cursor return Bonus_rec;

        ------------------------------------------------
        --创建全局数据表类型,用于执行查询
        ------------------------------------------------
        type bontab is table of Bonus_rec index by binary_integer;

        ------------------------------------------------
        --创建数据源程序包,用于前台数据源
        ------------------------------------------------
        procedure Bonus_refcur(Bonus_data in out b_cursor);

        ------------------------------------------------
        --创建数据查询程序包,用于前台Execute_Query
        ------------------------------------------------
        procedure Bonus_query(Bonus_data in out bontab);

        ----------------------------------------------------------------
        --创建数据操作程序包,用于前台Insert/Update/Delete/Lock
        ----------------------------------------------------------------
        procedure Bonus_insert(r in Bonus_rec);
        procedure Bonus_lock(s in Bonus.empno%type);
        procedure Bonus_update(t in Bonus_rec);
        procedure Bonus_delete(t in Bonus_rec);

        ----------------------------------------------------------------
        --创建返回记录条数函数
        ----------------------------------------------------------------
        function count_query
                return number;

end Bonus_pkg;
/

create or replace package body Bonus_pkg
is       
        ----------------------------------------------------------------
        --构造数据源
        ----------------------------------------------------------------
        procedure Bonus_refcur(Bonus_data in out b_cursor)
        is
        begin
                --打开游标,由于参数是In Out类型,所以直接返回
                open Bonus_data for
                        select empno, ename, job, sal, comm
                        from Bonus;
        end Bonus_refcur;


        ----------------------------------------------------------------
        --执行FORMS的Execute_Query
        ----------------------------------------------------------------
        procedure Bonus_query(Bonus_data in out bontab)
        is
                ii Number:=1;
                --定义游标
                cursor bonselect is
                        select empno, ename, job, sal, comm
                        from Bonus;
        begin
                --打开游标
                open bonselect;
                --在循环中,将所有数据读入数据表变量
                loop
                        fetch bonselect into
                                Bonus_data(ii).empno,
                                Bonus_data(ii).ename,
                                Bonus_data(ii).job,
                                Bonus_data(ii).sal,
                                Bonus_data(ii).comm;
                        exit when bonselect%notfound;
                        ii:=ii+1
                end loop;
        end Bonus_query;

        ----------------------------------------------------------------
        --执行FORMS的Insert
        ----------------------------------------------------------------
        procedure Bonus_insert(r in Bonus_rec)
        is
        begin
                --插入数据,注意没有Commit,Commit的动作可由前台Commit_Form完成
                insert into Bonus
                        values(r.empno, r.ename, r.job, r.sal, r.comm);
        end Bonus_insert;

        ----------------------------------------------------------------
        --执行FORMS的Lock
        ----------------------------------------------------------------
        procedure Bonus_lock(s in Bonus.empno%type)
        is
                v_rownum number;
        begin
                --锁定数据,利用Select For Update完成,注意:V_RowNum没有起实际的作用,只是配合Select For Update语句正确执行而已。
                select empno
                        into v_rownum
                        from Bonus
                        where empno=s
                        for update of ename;
        end Bonus_lock;

        ----------------------------------------------------------------
        --执行FORMS的Update
        ----------------------------------------------------------------
        procedure Bonus_update(t in Bonus_rec)
        is
        begin
                --更新数据,注意没有Commit,Commit的动作可由前台Commit_Form完成
                update Bonus
                        set ename=t.ename, job=t.job, sal=t.sal, comm=t.comm
                        where empno=t.empno;
        end Bonus_update;

        ----------------------------------------------------------------
        --执行FORMS的Delete
        ----------------------------------------------------------------
        procedure Bonus_delete(t in Bonus_rec)
        is
        begin
                --删除数据,注意没有Commit,Commit的动作可由前台Commit_Form完成
                delete from Bonus
                        where empno=t.empno;
        end Bonus_delete;

        ----------------------------------------------------------------
        --获取返回记录条数
        ----------------------------------------------------------------
        function count_query
                return number
        is
                r number;
        begin
                select count(0)
                        into r
                        from Bonus;
                return r;
        end count_query;

end Bonus_pkg;
/

评分

参与人数 1努力值 +10 收起 理由
xiangzhao + 10 好东西~~

查看全部评分

发表于 2007/11/17 11:46:22 | 显示全部楼层
謝謝分享,學習一下。
发表于 2007/11/20 10:07:08 | 显示全部楼层
學習一下!!!!
发表于 2008/10/27 17:12:11 | 显示全部楼层
学习一下
发表于 2008/10/28 22:28:00 | 显示全部楼层
学习了
发表于 2008/11/2 09:15:28 | 显示全部楼层
没什么用,,,,,不学也罢,,,,
发表于 2008/11/3 09:20:04 | 显示全部楼层
DB2的后台这个方法也试用吗?
发表于 2008/11/4 12:33:47 | 显示全部楼层
:L :L
发表于 2008/11/7 09:43:48 | 显示全部楼层
这个还是很有用的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 05:30 , Processed in 0.018469 second(s), 18 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表