问题描述
嗨,汤姆,
提前感谢您回答我的问题。我有一个需要更改的现有过程,我想添加一个可选的pl/sql表作为参数,它也使用大容量插入。这个过程也从各种其他包调用,所以我不希望这些包受到影响。
当我们在没有可选参数的情况下调用此函数时,我将得到一个oracle错误“gtORA-22160 :索引【1】处的元素不存在。请告诉我如何修复此问题。
谢谢,
查兰
创建表test_gt
(列1号,
第2列编号) ;
下面是示例代码
创建或替换包charan_test
组件
类型盖_gtbl_type IS表emp.empno%TYPE
BINARY_INTEGER索引;
gt_ledger_id盖_gtbl_type ;
类型秒_id_int1_gtbl_type IS部门表编号%TYPE
BINARY_INTEGER索引;
程序主程序(
p_ledger_id_tbl IN盖_gtbl_type ,
tbl IN sec_id_int1_gtbl_type DEFAULT C组件T (
NULL 组件 sec_id_int1_gtbl_type));
结束;
/
创建或替换包体charan_test
组件
程序主程序(
p_ledger_id_tbl IN盖_gtbl_type ,
tbl IN sec_id_int1_gtbl_type DEFAULT C组件T (
NULL 组件 sec_id_int1_gtbl_type))
是
开始
中频p_ledger_id_tbl.计数<> 0
那么
对于所有的我在1。p_ledger_id_tbl.计数
INSERT到test_gt (第1列,第2列)
值(p_ledger_id_tbl (i),tbl (i)) ;
结束IF ;
例外
当其他人
那么
提高;
结束;
结束;
/
提前感谢您回答我的问题。我有一个需要更改的现有过程,我想添加一个可选的pl/sql表作为参数,它也使用大容量插入。这个过程也从各种其他包调用,所以我不希望这些包受到影响。
当我们在没有可选参数的情况下调用此函数时,我将得到一个oracle错误“gtORA-22160 :索引【1】处的元素不存在。请告诉我如何修复此问题。
谢谢,
查兰
创建表test_gt
(列1号,
第2列编号) ;
下面是示例代码
创建或替换包charan_test
组件
类型盖_gtbl_type IS表emp.empno%TYPE
BINARY_INTEGER索引;
gt_ledger_id盖_gtbl_type ;
类型秒_id_int1_gtbl_type IS部门表编号%TYPE
BINARY_INTEGER索引;
程序主程序(
p_ledger_id_tbl IN盖_gtbl_type ,
tbl IN sec_id_int1_gtbl_type DEFAULT C组件T (
NULL 组件 sec_id_int1_gtbl_type));
结束;
/
创建或替换包体charan_test
组件
程序主程序(
p_ledger_id_tbl IN盖_gtbl_type ,
tbl IN sec_id_int1_gtbl_type DEFAULT C组件T (
NULL 组件 sec_id_int1_gtbl_type))
是
开始
中频p_ledger_id_tbl.计数<> 0
那么
对于所有的我在1。p_ledger_id_tbl.计数
INSERT到test_gt (第1列,第2列)
值(p_ledger_id_tbl (i),tbl (i)) ;
结束IF ;
例外
当其他人
那么
提高;
结束;
结束;
/
专家解答
EXCEPTION WHEN OTHERS THEN RAISE; END;
我讨厌这样。为什么-为什么为什么为什么-为什么你要这么做?你真的想让调试代码变得更难,不是吗...构造的唯一功能就是从你身上删除信息- -它隐藏行号。唉。
请不要说“这只是一个演示”,如果你不在现实生活中做类似的事情,为什么你会不辞辛劳地把它放在演示中呢?请停止这种做法。
ops$tkyte%ORA11GR2> create table test_gt
2 (column1 number,
3 column2 number);
Table created.
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> CREATE OR REPLACE PACKAGE charan_test
2 AS
3 TYPE lid_gtbl_type IS TABLE OF number INDEX BY BINARY_INTEGER;
4 TYPE sec_id_int1_gtbl_type IS TABLE OF number INDEX BY BINARY_INTEGER;
5
6 gt_ledger_id lid_gtbl_type;
7
8 PROCEDURE main
9 ( p_ledger_id_tbl IN lid_gtbl_type,
10 tbl IN sec_id_int1_gtbl_type DEFAULT cast( null as sec_id_int1_gtbl_type) );
11
12 END;
13 /
Package created.
ops$tkyte%ORA11GR2> show errors
No errors.
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> CREATE OR REPLACE PACKAGE BODY charan_test
2 AS
3
4 PROCEDURE main
5 ( p_ledger_id_tbl IN lid_gtbl_type,
6 tbl IN sec_id_int1_gtbl_type DEFAULT cast( null as sec_id_int1_gtbl_type) )
7 as
8 begin
9
10 if ( tbl.count = p_ledger_id_tbl.count )
11 then
12 FORALL i IN 1 .. p_ledger_id_tbl.COUNT
13 INSERT INTO test_gt (column1, column2)
14 VALUES (p_ledger_id_tbl (i), tbl (i));
15 else
16 forall i in 1.. p_ledger_id_tbl.count
17 insert into test_gt(column1)
18 values( p_ledger_id_tbl(i) );
19 end if;
20 end;
21 end;
22 /
Package body created.
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> declare
2 l_data1 charan_test.lid_gtbl_type;
3 l_data2 charan_test.sec_id_int1_gtbl_type;
4 begin
5 l_data1(1) := 100;
6 l_data1(2) := 200;
7 l_data2(1) := 1000;
8 l_data2(2) := 2000;
9 charan_test.main( l_data1 );
10 charan_test.main( l_data1, l_data2 );
11 end;
12 /
PL/SQL procedure successfully completed.
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> select * from test_gt;
COLUMN1 COLUMN2
---------- ----------
100
200
100 1000
200 2000
ops$tkyte%ORA11GR2>
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




