- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Oracle 12c 数据库,其中有一个包含标识列的表:
CREATE TABLE foo (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
bar NUMBER
)
现在我想使用 PL/SQL 插入到表中。由于实际上该表有很多列,因此我使用 %ROWTYPE
:
DECLARE
x foo%ROWTYPE;
BEGIN
x.bar := 3;
INSERT INTO foo VALUES x;
END;
但是,它给了我这个错误:
ORA-32795: cannot insert into a generated always identity column
ORA-06512: at line 5
由于它对于代码的可读性和可维护性非常好,所以我不想停止使用%ROWTYPE
。由于我在任何情况下都不想允许除自动生成的 ID 之外的任何内容,所以我不想解除 GENERATED ALWAYS
限制。
This文章建议使用 %ROWTYPE
的唯一方法是切换到 GENERATED BY DEFAULT ON NULL
。没有其他办法可以解决这个问题吗?
最佳答案
由于您使用的是 12c,所以我唯一能想到的就是使标识列INVISIBLE
,如下面的代码。
问题在于,它使得获取带有 id 的 %ROWTYPE
变得更加困难,但这是可行的。
当然,使用您的表的其他人也可能会因为看不到主键而感到困惑!
我不认为我会这样做,但它是对你的问题的回答,无论其值(value)如何。
DROP TABLE t;
CREATE TABLE t ( id number invisible generated always as identity,
val varchar2(30));
insert into t (val) values ('A');
DECLARE
record_without_id t%rowtype;
CURSOR c_with_id IS SELECT t.id, t.* FROM t;
record_with_id c_with_id%rowtype;
BEGIN
record_without_id.val := 'C';
INSERT INTO t VALUES record_without_id;
-- If you want ID, you must select it explicitly
SELECT id, t.* INTO record_with_id FROM t WHERE rownum = 1;
DBMS_OUTPUT.PUT_LINE(record_with_id.id || ', ' || record_with_id.val);
END;
/
SELECT id, val FROM t;
关于oracle - 插入带有标识列的 Oracle 表时如何使用 %ROWTYPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33675304/
如何获取使用 %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_”,并
我是一名优秀的程序员,十分优秀!