oracle 匿名块 游标,在oracle中的匿名塊中引用通用遊標
在包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中的匿名塊中引用通用遊標相关推荐
- oracle存储过程游标调用,oracle存储过程调用游标例子-Oracle
oracle存储过程调用游标例子. 1:首先你需要创建一个包,并定义你返回的游标的类型.存储过程 create or replace package TEST_PKG is --定义游标 type t ...
- oracle 数据块 修复,案例:Oracle坏块 使用RMAN工具的命令clear标记数据块为corrupt 修复坏块...
天萃荷净 运维DBA巡检发现数据文件中存在坏块,使用RMAN工具的命令clear标记数据坏块,使用bbed修复坏块 在rman中有隐藏的命令clear,可以标记数据块为corrupt,从而实现数据库坏 ...
- oracle坏块 戴明明,Oracle数据库问题解决方案和故障排除手册
第1 章 LOB 段性能的诊断与调优 1 1.1 LOB 数据类型的介绍 1 1.1.1 解决LOB 问题:一个真实的案例 2 1.1.2 另一个真实案例:HW 分析 4 1.1.3 BASICFIL ...
- oracle简单的游标示例,Oracle游标简单示例
使用游标打印员工姓名和薪水 set serveroutput on; declare cursor cemp is select ename,sal from emp; cname emp.ename ...
- Oracle代码块详解,Oracle可执行代码块
declare --声明变量 v_menu_name varchar(50):='aaa管理'; --声明字符串变量必须带上长度 v_menu_url varchar(100):='/aaa.html ...
- oracle退出本循环,Oracle,跳出游标循环
1,跳出游标的循环,不执行遍历了. 方法一:goto for c_row in 游标 loop if 条件 then dbms_output.put_line('测试跳出循环'); goto brea ...
- oracle中创建游标,oracle 存储过程创建游标
Oracle与Sql Server差异点详解 1.create函数或存储过程异同点 Oracle 创建函数或存储过程一般是 create or replace -- SQL SERVER 则是在创建之 ...
- oracle itl解析,oracle数据块dump文件中ITL详解
oracle数据块dump文件中ITL详解 dump出Oracle block后,可以看到事物槽,包含有事物槽号(ITL),XID,UBA,FLAG,LCK,SCN. 本文主要讨论FLAG标记的规则, ...
- Oracle PL/SQL匿名块
转载: http://blog.163.com/lyq_163_2009/blog/static/1340826962010712103822138/ PL/SQL单行注释使用--,多行注释使用/* ...
最新文章
- 54页PPT揭示AI革命及其前沿进展!
- 第四十四课:jQuery UI和jQuery easy UI
- JDK 14的新特性:文本块Text Blocks
- TPLink 备份文件bin文件解析
- Python3自带HTTP文件传输服务(局域网文件共享)
- 播放器之争:VLC VS SmartPlayer
- python获取命令行参数_Python获取命令行参数的正确方法,案例详解
- JS实现新打开网页最大化or全屏显示
- 汇编三星题目:一个有符号字数组以0为结束标志,编程求这个数组的最大值、 最小值、平均值
- 【BZOJ 1031】[JSOI2007]字符加密Cipher(后缀数组模板)
- nginx 配置参数说明
- 信号与线性系统分析 吴大正 (与电子 通信专业的同学共勉)
- 联想服务器远程管理模块,联想慧眼远程管理模块-Lenovo服务网站.PDF
- 问题记录1:网络和共享中心打不开的解决办法
- 我收集了如下的一些语录
- 怎么解决服务器延迟问题
- pdfpcell 怎么设置单元格大小_word怎么设置单元格大小
- TextView和EditText
- 新生代小鲜肉之代码生成器
- 游戏静态HTML网页作业作品 大学生游戏介绍网页设计制作成品 简单DIV CSS布局网站
热门文章
- OSChina 周六乱弹 —— 我有必须离开的理由!再见了 咸鱼们!
- 工作室软路由该用哪个系统?
- kafka学习--使用kafka conect操作kafka connector
- 用html5中canvas实现一个微信零钱余额生成器
- 跨境电商ERP中的自动化 3.平台订单自动发货
- 如何用计算机打出妈妈我爱你,教你用30种语言说“妈妈我爱你”(内附教程哦!)...
- 关于技术人能赚钱的十种途径
- 如何将Word表格内的文字居中对齐
- ZZULIOJ:1089: 阶乘的最高位
- 如何编辑、输入、翻译并获知韩语的意思