【发布时间】:2023-04-08 04:11:02
【问题描述】:
使用 Oracle SQL,我有几个带有手动绑定变量的 SQL 查询,用于创建如下表:
我想做的是将定义 anfang 更改为 (select c_year_beginning from master_date_automation)。
我尝试了几种绑定变量的组合,但无法使其工作(使用 DEL cmets 编辑):
begin
execute immediate 'DROP TABLE A_TEST_TABLE'
end;
/
begin
execute immediate 'create table A_TEST_TABLE (
user varchar2(100),
product varchar2(100),
datum date)';
end;
/
BEGIN
DECLARE
v_c_year_ytd DATE;
BEGIN
SELECT c_year_ytd Into v_c_year_ytd FROM master_date_automation;
BEGIN
SELECT usr.datum || ','
|| usr.user || ','
|| usr.product
INTO A_TEST_TABLE
FROM users_table usr
WHERE usr.datum = v_c_year_ytd
AND kto.kontonummer = '00510199065';
END;
END;
END;
错误信息(Del 注释后编辑):
Error report -
ORA-06550: line 12, column 6:
PLS-00403: expression 'A_TEST_TABLE' cannot be used as an INTO-target of a SELECT/FETCH statement
ORA-06550: line 12, column 21:
PL/SQL: ORA-00904: : invalid identifier
ORA-06550: line 9, column 1:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
如果有人可以帮助我,我将非常感激。
提前万分感谢!
【问题讨论】:
-
好吧,您的错误与您的问题无关。当您在同一脚本中链接块时,请在每个
END;之后的新行中添加一个/ -
另外,我认为您需要再次查看您的脚本。其中许多命令可以/应该在块之外完成,因此您不需要使用
EXECUTE IMMEDIATE。此外,请检查您的BEGIN和END类似括号。您在调用它的块之外声明 V_C_YEAR_YTD。 -
最重要的是,您不需要在 DDL 语句(DROP、CREATE 等)之后
COMMIT,不仅存在由 Oracle 调用的隐式提交,而且它没有适用于这些更改。 -
非常感谢德尔!我尝试了以下方法,但也没有成功:
标签: sql plsql oracle-sqldeveloper