如何解决有什么方法可以在 Oracle 中动态创建插入语句?
我想创建一个可以自定义哪些列的插入语句。 首先,我为自定义表中的选择列名称创建了一个curosr。效果很好。
create or replace procedure PROC_TEST_DATA_INSERT
(tableNameT in varchar2)
as
columnName varchar2(30);
CURSOR C_Columns IS
select
COLUMN_NAME from user_tab_columns
where table_name = tableNameT;
begin
end PROC_TEST_DATA_INSERT;
然后,我想打开游标并将哪个列的名称来自游标的表插入到表中。但它不起作用
create or replace procedure PROC_TEST_DATA_INSERT
(tableNameT in varchar2)
as
columnName varchar2(30);
CURSOR C_Columns IS
select
COLUMN_NAME from user_tab_columns
where table_name = tableNameT;
begin
open C_Columns;
LOOP
fetch C_Columns into
columnName;
insert into
output(columnName)
values(columnName);
if C_Columns%notfound then
exit;
end if;
end LOOP;
close C_Columns;
end PROC_TEST_DATA_INSERT;
call PROC_TEST_DATA_INSERT('aTableName')
然后我得到了 ORA-01732: 在此视图中数据操作操作不合法
显然,问题出在插入语句中,因为如果我将变量更改为具体的列,如名称、现有列,它会起作用。
insert into
output(name)
values(columnName);
无论如何在 Oracle 中创建动态插入语句,或者不可能?
感谢您的回答!
解决方法
为此使用动态查询。动态查询可以通过两种方式执行。
- 立即执行
- DBMS_SQL.EXECUTE (dynamic_sql_string) - 它提供了更多的功能和对 EXECUTE IMMEDIATE 的控制,我们可以解析传入的表名和列名。
.secondary-invoice {
opacity: 0;
height: 0px !important;
}
@media print {
.secondary-invoice {
opacity: 1;
height: 100% !important;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。