- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TYPE ref_cur IS REF CURSOR;
ref_cur_name ref_cur;
TYPE tmptbl IS TABLE OF ref_cur_name%ROWTYPE;
n_tmptbl tmptbl;
我试过这段代码,但无法通过编译器获得它。有没有办法将 ref 游标的结果存储到表中?
注意-我需要一个表,因为我需要访问 ref cursor 的列。使用 dbms_sql
访问 ref cursor 的记录对我来说有点困难。
更新:
/* Formatted on 8/1/2013 4:09:08 PM (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE proc_deduplicate (p_tblname IN VARCHAR2,
p_cname IN VARCHAR2,
p_cvalue IN VARCHAR2)
IS
v_cnt NUMBER;
TYPE ref_cur IS REF CURSOR;
ref_cur_name ref_cur;
v_str1 VARCHAR2 (4000);
v_str2 VARCHAR2 (4000);
v_str3 VARCHAR2 (4000);
BEGIN
v_str1 :=
'SELECT ROWID v_rowid FROM '
|| p_tblname
|| ' WHERE '
|| p_cname
|| '='''
|| p_cvalue
|| '''';
BEGIN
v_str2 :=
'SELECT COUNT ( * )
FROM '
|| p_tblname
|| ' WHERE '
|| p_cname
|| ' = '''
|| p_cvalue
|| '''';
logerrors ('proc_deduplicate',
'count exception',
SQLCODE,
v_str2 || SQLERRM,
'e');
EXECUTE IMMEDIATE v_str2 INTO v_cnt;
EXCEPTION
WHEN OTHERS
THEN
logerrors ('proc_deduplicate',
'count exception',
SQLCODE,
SQLERRM,
'e');
END;
IF v_cnt IS NOT NULL
THEN
OPEN ref_cur_name FOR v_str1;
LOOP
IF v_cnt = 1
THEN
EXIT;
ELSE
BEGIN
v_str3 :=
'DELETE FROM '
|| p_tblname
|| ' WHERE ROWID = v_rowid ';
-- THIS IS THE PROBLEM . i just created an alias above for rowid keyword but i guess, DBMS sql will have to be used after all .
EXECUTE IMMEDIATE v_str3;
EXCEPTION
WHEN OTHERS
THEN
logerrors (
' proc_deduplicate
',
' delete exception
',
SQLCODE,
SQLERRM,
' e
'
);
END;
END IF;
v_cnt := v_cnt - 1;
END LOOP;
END IF;
EXCEPTION
WHEN OTHERS
THEN
logerrors (
' proc_deduplicate',
' final exception
',
SQLCODE,
SQLERRM,
' e'
);
END;
/
最佳答案
通过发出 TYPE ref_cur IS REF CURSOR
,您声明了一个弱游标。弱游标不返回指定类型。这意味着您不能声明 weak_cursor%rowtype
的变量,因为弱游标不返回任何类型。
declare
type t_rf is ref cursor;
l_rf t_rf;
type t_trf is table of l_rf%rowtype;
l_trf t_trf;
begin
null;
end;
ORA-06550: line 4, column 27:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 4, column 3:
PL/SQL: Item ignored
如果您为引用游标指定返回类型,使其变强,您的 PL/SQL block 将成功编译:
SQL> declare -- strong cursor
2 type t_rf is ref cursor return [table_name%rowtype][structure];
3 l_rf t_rf;
4 type t_trf is table of l_rf%rowtype;
5 l_trf t_trf;
6 begin
7 null;
8 end;
9 /
PL/SQL procedure successfully completed
关于sql - TYPE 可以声明为 ref cursor rowtype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17989977/
如何获取使用 %ROWTYPE 参数的 PLSQL 过程的真实签名? 例如 : clear screen; prompt > Table creation to support %ROWTYPE cr
我是 PL/SQL 的新手,并尝试创建一个引用表行的对象: CREATE OR REPLACE TYPE my_object AS OBJECT( table_row my_table%ROWTY
我在 PostgreSQL 9.2.9 中有一个 plpgsql 函数需要返回多个列。大多数列都来自一个表,所以我声明了虚拟表(这个术语正确吗?)rc 为: rc "Sequence"%rowtype
我需要一个模式级类型(从 C++ 代码引用它),它总是与表的 %rowtype 记录相同(相同的字段)。遗憾的是,我不能直接从代码中使用 %rowtype,只能使用声明为 的命名类型 create t
下面的 W.r.t 代码我不能将 fetch-into-variable 的类型声明为基础表的 %ROWTYPE,因为 SYS_REFCURSOR 位于连接两个表的选择上,并且还选择了一些在基础两个表
所以我有一个存储过程ONE create or replace PROCEDURE ONE ( A in number B in number ... ZZ out SYS_R
我有一个 Oracle 12c 数据库,其中有一个包含标识列的表: CREATE TABLE foo ( id NUMBER GENERATED ALWAYS AS IDENTITY PRI
我有一个变量定义如下: declare TYPE tnr_l IS VARRAY(30) of lve%ROWTYPE; 我希望通过从数据库中获取数据来初始化此变量: select * int
我在函数内部声明如下: SEL_USER APP.USER % ROWTYPE; 然后我做了选择 完美运行: SELECT * INTO SEL_USER FROM APP.USER WHE
将数据从 csv 加载到现有 Postgres 表后,我将有需要合并的重复记录。为此,我计划使用执行以下操作的存储过程: current_record airports%ROWTPE; n
我目前正在用 plpgsql 语言编写一个函数来创建分区,该分区将保存每个月的传感器数据(一个分区用于一个月和一个传感器)。我被这个错误困住了: ERROR: missing FROM-clause
我有一个 PostgreSQL 函数,如下所示: CREATE FUNCTION myFunc() returns myTable as $$ DECLARE my_row myTable%ROWTY
创建具有一种行类型的简单 TableView 相当容易。你只要设置 tableView.setNumberOfRows(yourArray.count, withRowType: "yourowtyp
我有一个看起来像的存储过程: PROCEDURE get_curx( p_buf IN ni_imsi%ROWTYPE, p_bufx
如果我有一个函数,它只返回包含表中某些列的一行。我需要在函数返回声明中添加%rowtype吗? CREATE OR REPLACE FUNCTION test(int n) RETURNS table
TYPE ref_cur IS REF CURSOR; ref_cur_name ref_cur; TYPE tmptbl IS TABLE OF ref_cur_name%ROWTYPE
我现在没有权限来测试这个,但是下面是——或者类似的东西,因为我的即兴代码可能并不完美! -- 在 Oracle 中可能: declare myRecord myTable%ROWTYPE; beg
我正在尝试在 postgres 中创建一个函数,该函数从一个表中检索数据并将其输入到另一个表中。我正在使用 %ROWTYPE 类型来存储来自 select 语句的临时数据,然后使用插入语句遍历它,但没
所需的设置 为了提高某些代码的优雅,我想知道是否/可以做与%ROWTYPE variable from table name相反的事情— 从 %ROWTYPE 或 RECORD 中提取表名(最相关的是
我正在 Postgres 中开发一个函数,旨在为查询的每条记录恢复一组函数中包含的检查结果的值。这些函数中只有一个会返回正确的值。这些函数有一个公共(public)前缀“fn_condicao_”,并
我是一名优秀的程序员,十分优秀!