我在旧数据库中遇到以下问题。我们最近从sql迁移到了oracle,我遇到了一个插入语句,其中列名是“default”。任何想法(我不允许更改列名,这是迄今为止最好的解决方案!)?
它看起来像这样,只有十亿个列,并且它在一个大的if-when-else结构中用于验证问题,所以我不能立即删除执行。
EXECUTE IMMEDIATE 'INSERT INTO trytable (ID, "DEFAULT") VALUES (''monkey1'', 0)'
答案 0 :(得分:2)
我认为问题不在于您的列名,如本工作示例所示:
SQL> CREATE TABLE trytable (ID VARCHAR2(10), "DEFAULT" NUMBER);
Table created
SQL> BEGIN
2 EXECUTE IMMEDIATE
3 'INSERT INTO trytable (ID, "DEFAULT") VALUES (''monkey1'', 0)';
4 END;
5 /
PL/SQL procedure successfully completed
从技术上讲,您可以拥有一个名为DEFAULT
的表列名称,即使这通常是个坏主意,也会导致混淆。您只能通过双引号"
语法与其进行交互,因为DEFAULT
是保留字。
如果您在标识符Oracle will treat them as case-sensitive周围指定双引号,那么您必须确保它们符合表格规范。
在您的情况下,有助于获得特定的错误消息。
答案 1 :(得分:1)
如果您的列名为"DEFAULT"
:
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO TRYTABLE(ID, "DEFAULT")VALUES(''monkey1'',0)';
END;
“DEFAULT”和“默认”有所不同。