`
钸僢喾耔
  • 浏览: 23411 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
文章分类
社区版块
存档分类

Oracle中的存储过程

阅读更多
[color=gray][/color]2) 对于两个表如果字段数不一样,但是有几个字段的结构一样时〔类似于父子关系〕,必须使用 INSERT INTO B(field1,field2) select A.field1,A.field2 from A;


1.用带参数的游标实现insert功能:


CREATE OR REPLACE PROCEDURE GET_DATA(

-- 参数列表:

n_task_id IN number, --任务编号

v_task_name IN varchar2, --任务名称

v_name IN varchar2 -- 名称

)

-----------------------------------------------

-- PROCEDURE名 :GET_DATA --

-- 処理内容 :从数据源表取得符合条件的的数据插入到目标数据表: --

-- 引数 :n_tas_id 任务ID, --

-- v_task_namek 任务名称, --

-- v_bdw_name 对数据源表限制条件:本地网名称 --

-----------------------------------------------

IS

--插入行数控制

i_count number(5);

--取数据游标:DATA_CUR(IN_NAME)

--参数:本地网名称:IN_NAME

CURSOR DATA_CUR(IN_NAME VARCHAR2) IS /**注意:参数的定义中不带精度**/

SELECT *

FROM GET_DATA_SRC A

WHERE A.NAME = IN_NAME;

BEGIN

--计数器,控制插入行数

i_count := 0;

--循环插入数据

FOR MYCUR IN DATA_CUR(v_name) LOOP

INSERT INTO ABC(

ROW_ID,

TASK_ID,

TASK_NAME,

GET_DATA_DT,

CUST_ID,

ASSIGN_FLAG,

DEAL_DATE

)VALUES(

SEQ_KD.NEXTVAL,

N_TASK_ID,

V_TASK_NAME,

SYSDATE,

MYCUR.CUST_ID,

'N',

NULL

);

--程序试用阶段,以后会删除satrt

i_count := i_count + 1;

IF i_count >100 THEN

COMMIT;

RETURN;

END IF;

--程序试用阶段,以后会删除end

END LOOP;

--数据commit,程序调试阶段避免大量数据,暂时关闭

--commit;

--------例外处理部分----------------------------

EXCEPTION

WHEN OTHERS THEN

rollback;

END SRBZ_GET_SRBZ_KD_SPEED;

/


2.使用语句拼接法实现insert功能:


注:2.1字符串常量的引号 2.2 变量的引号


CREATE OR REPLACE PROCEDURE ABC(

-- 参数列表:

task_id IN number, --任务编号

task_name IN varchar2, --任务名称

in_NAME IN varchar2 --名称

)

--------------------------- PROCEDURE名 :ABC

-- 処理内容 :从数据源表取得符合条件的的数据插入到目标数据表

-- 引数 :table_src 数据源表

-- table_to 数据插入目标表

-- in_bdw_name 对数据源表限制条件:本地网名称

---------------------------------------------

IS

--INSERT_STRING 动态生成的insert语句存放处

INSERT_STRING VARCHAR2(1000);

--数据源表存放处

tableSrc varchar2(500);

--数据插入目标表存放处

tableTarget varchar2(1000);

--数据目标表需要插入值的字段存放处

StrFields varchar2(1000);

BEGIN

--数据源表为:AAA

tableTarget := ' BBB ';

--数据来源

tableSrc := ' select seq_kd.nextval,sysdate,'||task_id||','''||task_name||''', '

||'A.* from AAA A'

||' WHERE A.value='||'''IP-VPDN'''

||'AND A.remark IS NULL';

--需要插入的字段

StrFields := '(ROW_ID,GET_DATA_DT,TASK_ID,TASK_NAME,COST_CTR,SERVICE_ID,'

||'SI_ADDR,SI_SERVER_ID)';

--生成insert语句

INSERT_STRING := 'INSERT INTO ' || tableTarget || StrFields || tableSrc ;

--执行insert语句

execute immediate INSERT_STRING;

--提交事务

commit;

--------例外处理部分-------------------------------------------------------

EXCEPTION

--异常的抛出

WHEN OTHERS THEN

--DBMS_OUTPUT.PUT_LINE('处理过程中出错,程序退出,未执行相关内务');

rollback;

END SRBZ_GET_SRBZ_KD_GSVPDN_FREE;

/
分享到:
评论

相关推荐

    Oracle存储过程、游标、函数的详解

    ### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...

    oracle存储过程学习经典入门

    在存储过程中,select 某一字段时,后面必须紧跟 into,如果 select 整个记录,利用游标的话就另当别论了。在利用 select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no datafound"异常。在存储...

    Oracle存储过程基本语法

    在存储过程中,变量声明是必不可少的,格式为: 变量名 类型(值范围); 例如: vs_msg VARCHAR2(4000); 变量 2 类型(值范围); 其中,vs_msg 是变量名,VARCHAR2(4000) 是变量的数据类型和值范围。 游标 ...

    oracle存储过程教程

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写包含一系列SQL语句和PL/SQL块的程序单元,这些程序单元可以在需要时执行,提高了数据处理的效率和应用程序的性能。在Java开发中,Oracle...

    oracle存储过程解锁

    以下是对“oracle存储过程解锁”这一主题的深入解析。 ### 标题:“oracle存储过程解锁” #### 解析: 在Oracle数据库中,存储过程是一种预先编译并存储在数据库中的SQL代码块,用于执行复杂的业务逻辑或数据处理...

    Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

    oracle 存储过程学习总结

    游标是Oracle存储过程中的一个重要组成部分,用于处理查询结果集。文章中展示了如何声明游标、使用游标变量,以及如何使用for循环和Fetch语句来访问和处理游标中的数据。其中,声明游标的基本语法是CURSOR cursor_...

    oracle 存储过程导出excel

    oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel

    oracle 事务 回滚 存储过程

    ### Oracle存储过程 存储过程是在数据库中预编译的一组SQL语句,用于执行复杂的业务逻辑或数据操作。它们可以接受输入参数,执行一系列数据库操作,并返回结果。在Oracle中,存储过程使用PL/SQL编写,可以在数据库...

    delphi调用Oracle的存储过程

    #### Oracle存储过程创建 首先,我们需要在Oracle数据库中创建一个存储过程。以下是一个示例存储过程`pkg_test`的创建脚本: ```sql CREATE OR REPLACE PACKAGE pkg_test AS TYPE myrctype IS REF CURSOR; ...

    oracle通过存储过程POST方式访问接口

    总的来说,"Oracle通过存储过程POST方式访问接口"涉及到数据库编程、网络通信和安全性等多个方面,需要综合运用PL/SQL和Oracle的网络工具。通过学习和实践,你可以构建出高效、安全的接口交互方案。

    使用Spring的JdbcTemplate调用Oracle的存储过程

    使用Spring的JdbcTemplate调用Oracle的存储过程

    Delphi中调用oracle的存储过程返回数据集

    Delphi 中调用 Oracle 的存储过程返回数据集是指在 Delphi 应用程序中调用 Oracle 数据库中的存储过程,并将存储过程的返回结果集显示在 Delphi 应用程序中。这种方式可以将 Oracle 数据库中的数据实时同步到 Delphi...

    oracle分页存储过程

    oracle分页存储过程,oracle分页存储过程

    oracle存储过程unwrap解密工具.zip

    Oracle存储过程unwrap解密工具主要用于处理Oracle数据库中的加密存储过程。在Oracle数据库系统中,为了保护敏感代码或数据,开发人员有时会选择对存储过程进行加密。然而,当需要查看、调试或恢复这些加密的存储过程...

    oracle 存储过程 函数 dblink

    - `OUT`参数类型表示该参数是输出参数,可以用来从存储过程中返回值。 - 使用`SELECT ... INTO ...`语句将查询结果赋值给输出参数。 #### 五、调用带输出参数的存储过程 同样,我们可以通过Java代码来调用这个带有...

    oracle存储过程加密破解

    oracle存储过程加密破解 0

    oracle的存储过程如何返回结果集

    ### Oracle存储过程返回结果集详解 #### 一、概述 在Oracle数据库中,存储过程是一种重要的编程组件,它能够执行一系列SQL语句并处理复杂的业务逻辑。存储过程的一个常见应用场景是返回结果集(Record Set),这有...

Global site tag (gtag.js) - Google Analytics