在包pkg_cost_api中定義了以下內容。在oracle中的匿名塊中引用通用遊標

TYPE t_ref_generic IS REF CURSOR;

下面是相同包裝中的程序。

PROCEDURE transfer_costs

(

p_source_isbn IN product_header.mhid_part_nbr%TYPE,

p_dest_isbn IN product_header.mhid_part_nbr%TYPE,

p_plant_mfg_flag IN VARCHAR2,

p_employee_number IN product_header.add_by%TYPE,

p_transfer_results OUT pkg_cost_api.t_ref_generic

) IS

v_gen_cost_rec t_gen_cost_record := t_gen_cost_record(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

v_result_set t_gen_cost_table := t_gen_cost_table();

BEGIN

-- relevant code

Loop

v_gen_cost_rec.initialize();

v_gen_cost_rec.gen_cost_code := 'some value';

v_gen_cost_rec.gen_cost_code_desc := 'some value';

v_gen_cost_rec.amount := 'some value';

v_result_set.EXTEND;

v_result_set(v_result_set.COUNT) := v_gen_cost_rec;

End Loop;

OPEN p_transfer_results FOR

SELECT *

FROM TABLE(CAST(v_result_set AS t_gen_cost_table)) gen_costs;

END;

而且類型t_gen_cost_record是:

CREATE OR REPLACE TYPE t_gen_cost_record AS

OBJECT

(

gen_cost_code VARCHAR2(30),

gen_cost_code_desc VARCHAR2(100),

amount NUMBER,

cost_code VARCHAR2(30),

acct_category_code VARCHAR2(30),

category_desc VARCHAR2(100),

category_code VARCHAR2(30),

oracle_task_code VARCHAR2(3),

MEMBER PROCEDURE initialize

);

我試圖運行此腳本如下。

DECLARE

c_transfer_results pkg_cost_api.t_ref_generic;

v_finance_source_note product_note.note%TYPE;

v_comments nopc.comments%TYPE;

v_dest_comments nopc.comments%TYPE;

v_nopc_isbn nopc.isbn%TYPE := '0077449835';

v_move_plant_flag nopc.move_plant_flag%TYPE;

v_move_to_isbn nopc.move_to_isbn%TYPE := '0077364678';

v_gen_cost_code VARCHAR2(30);

v_gen_cost_code_desc VARCHAR2(100);

v_amount NUMBER;

BEGIN

pkg_cost_api.transfer_costs(

p_source_isbn => v_nopc_isbn,

p_dest_isbn => v_move_to_isbn,

p_plant_mfg_flag => 'PLANT',

p_employee_number => '000159457',

p_transfer_results => c_transfer_results

);

v_dest_comments := Chr(10) || ' Note Date: ' || SYSDATE;

v_finance_source_note := Chr(10) || ' Note Date: ' || SYSDATE;

LOOP

FETCH c_transfer_results INTO v_gen_cost_code, v_gen_cost_code_desc, v_amount;

EXIT WHEN c_transfer_results%NOTFOUND;

v_comments := v_comments || CHR(10) || 'Plant Transfer from ' || v_nopc_isbn || ' to ' || v_move_to_isbn ||

' Amounts: ' || v_gen_cost_code_desc || ': ' || v_amount || CHR(10);

v_finance_source_note := v_finance_source_note || CHR(10) || 'Plant Transfer from ' || v_nopc_isbn || ' to ' || v_move_to_isbn ||

' Amounts: ' || v_gen_cost_code_desc || ': ' || v_amount || CHR(10);

v_dest_comments := v_dest_comments || CHR(10) ||

'Plant Transfer to ' || v_move_to_isbn || ' from ' || v_nopc_isbn ||

' Amounts: ' || v_gen_cost_code_desc || ': ' || v_amount || CHR(10);

END LOOP;

EXCEPTION

WHEN OTHERS THEN

RAISE;

END;

當我試圖運行上面的腳本獨立,我得到了以下錯誤:

Error report:

ORA-06504: PL/SQL: Return types of Result Set variables or query do not match

ORA-06512: at line 39 06504. 00000 - "PL/SQL: Return types of Result Set variables or query do not match"

*Cause: Number and/or types of columns in a query does not match declared return type of a result set variable, or declared types of two Result Set variables do not match.

*Action: Change the program statement or declaration. Verify what query the variable actually refers to during execution.

可以請別人告訴我,究竟我做錯了這裏。

+1

您可以添加完整的錯誤堆棧,可能對查看異常是來自匿名塊還是來自程序內部有用,並且無論哪種方式確切地說是哪一行。 (我認爲這是'fetch into',但請確認。)在你的過程中查詢的數據類型是什麼,它填充了ref cursor?這聽起來像他們不匹配塊中的局部變量類型。 –

+0

錯誤報告: ORA-06504:PL/SQL:結果集變量或查詢的返回類型不匹配 ORA-06512:在行39 06504. 00000 - 「PL/SQL:結果集變量或查詢的返回類型不匹配」 *原因:在查詢號碼和/或列類型不匹配聲明的結果設置爲可變的 返回類型或聲明的類型兩個結果 設置變量的不匹配。 *操作:更改程序語句或聲明。驗證什麼查詢執行過程中的變量 實際上指的。 –

+0

@AlexPoole請發現上述錯誤堆棧。此外,我已經用附加信息更新了問題的描述。 –

oracle 匿名块 游标,在oracle中的匿名塊中引用通用遊標相关推荐

  1. oracle存储过程游标调用,oracle存储过程调用游标例子-Oracle

    oracle存储过程调用游标例子. 1:首先你需要创建一个包,并定义你返回的游标的类型.存储过程 create or replace package TEST_PKG is --定义游标 type t ...

  2. oracle 数据块 修复,案例:Oracle坏块 使用RMAN工具的命令clear标记数据块为corrupt 修复坏块...

    天萃荷净 运维DBA巡检发现数据文件中存在坏块,使用RMAN工具的命令clear标记数据坏块,使用bbed修复坏块 在rman中有隐藏的命令clear,可以标记数据块为corrupt,从而实现数据库坏 ...

  3. oracle坏块 戴明明,Oracle数据库问题解决方案和故障排除手册

    第1 章 LOB 段性能的诊断与调优 1 1.1 LOB 数据类型的介绍 1 1.1.1 解决LOB 问题:一个真实的案例 2 1.1.2 另一个真实案例:HW 分析 4 1.1.3 BASICFIL ...

  4. oracle简单的游标示例,Oracle游标简单示例

    使用游标打印员工姓名和薪水 set serveroutput on; declare cursor cemp is select ename,sal from emp; cname emp.ename ...

  5. Oracle代码块详解,Oracle可执行代码块

    declare --声明变量 v_menu_name varchar(50):='aaa管理'; --声明字符串变量必须带上长度 v_menu_url varchar(100):='/aaa.html ...

  6. oracle退出本循环,Oracle,跳出游标循环

    1,跳出游标的循环,不执行遍历了. 方法一:goto for c_row in 游标 loop if 条件 then dbms_output.put_line('测试跳出循环'); goto brea ...

  7. oracle中创建游标,oracle 存储过程创建游标

    Oracle与Sql Server差异点详解 1.create函数或存储过程异同点 Oracle 创建函数或存储过程一般是 create or replace -- SQL SERVER 则是在创建之 ...

  8. oracle itl解析,oracle数据块dump文件中ITL详解

    oracle数据块dump文件中ITL详解 dump出Oracle block后,可以看到事物槽,包含有事物槽号(ITL),XID,UBA,FLAG,LCK,SCN. 本文主要讨论FLAG标记的规则, ...

  9. Oracle PL/SQL匿名块

    转载:  http://blog.163.com/lyq_163_2009/blog/static/1340826962010712103822138/ PL/SQL单行注释使用--,多行注释使用/* ...

最新文章

  1. 54页PPT揭示AI革命及其前沿进展!
  2. 第四十四课:jQuery UI和jQuery easy UI
  3. JDK 14的新特性:文本块Text Blocks
  4. TPLink 备份文件bin文件解析
  5. Python3自带HTTP文件传输服务(局域网文件共享)
  6. 播放器之争:VLC VS SmartPlayer
  7. python获取命令行参数_Python获取命令行参数的正确方法,案例详解
  8. JS实现新打开网页最大化or全屏显示
  9. 汇编三星题目:一个有符号字数组以0为结束标志,编程求这个数组的最大值、 最小值、平均值
  10. 【BZOJ 1031】[JSOI2007]字符加密Cipher(后缀数组模板)
  11. nginx 配置参数说明
  12. 信号与线性系统分析 吴大正 (与电子 通信专业的同学共勉)
  13. 联想服务器远程管理模块,联想慧眼远程管理模块-Lenovo服务网站.PDF
  14. 问题记录1:网络和共享中心打不开的解决办法
  15. 我收集了如下的一些语录
  16. 怎么解决服务器延迟问题
  17. pdfpcell 怎么设置单元格大小_word怎么设置单元格大小
  18. TextView和EditText
  19. 新生代小鲜肉之代码生成器
  20. 游戏静态HTML网页作业作品 大学生游戏介绍网页设计制作成品 简单DIV CSS布局网站

热门文章

  1. OSChina 周六乱弹 —— 我有必须离开的理由!再见了 咸鱼们!
  2. 工作室软路由该用哪个系统?
  3. kafka学习--使用kafka conect操作kafka connector
  4. 用html5中canvas实现一个微信零钱余额生成器
  5. 跨境电商ERP中的自动化 3.平台订单自动发货
  6. 如何用计算机打出妈妈我爱你,教你用30种语言说“妈妈我爱你”(内附教程哦!)...
  7. 关于技术人能赚钱的十种途径
  8. 如何将Word表格内的文字居中对齐
  9. ZZULIOJ:1089: 阶乘的最高位
  10. 如何编辑、输入、翻译并获知韩语的意思