我在执行hibernate sql查询时看到一个错误.
java.sql.SQLException:ORA-00904:"table_name"."column_name":无效的标识符
当我在sqldeveloper中打开表时,列就存在了.
错误仅发生在PROD中,而不是发生在DEV中.
我该怎么检查?
我使用SQL开发人员,在创建用户并与具有所有所需权限的用户建立另一个连接后,我与系统用户建立了与数据库的连接.
但是当我尝试继续下面时,我得到了SQL错误
ORA-00942表或视图不存在:
INSERT INTO customer (c_id,name,surname) VALUES ('1','Micheal','Jackson')
Run Code Online (Sandbox Code Playgroud) 我执行了flyway:init,测试/测试为用户/密码,得到以下输出:
[INFO] Creating schema "MY_SCHEMA" ...
[INFO] Creating Metadata table: "MY_SCHEMA"."schema_version"
[INFO] Schema initialized with version: 1
Run Code Online (Sandbox Code Playgroud)
然后我使用MY_SCHEMA/flyway作为用户/密码连接到oracle但我无法在schema_version上选择,我得到"ORA-00942:表或视图不存在".用户测试也无法在schema_version上进行选择.
如何查看schema_version表中的内容?
谢谢
在一种情况下,我们正在动态地动态创建 sql 到create临时表。table_name 没有问题,因为它是由我们决定的,但是列名是由我们无法控制的来源提供的。
通常我们会使用以下查询检查列名:
select ..
where NOT REGEXP_LIKE (Column_Name_String,'^([a-zA-Z])[a-zA-Z0-9_]*$')
OR Column_Name_String is NULL
OR Length(Column_Name_String) > 30
Run Code Online (Sandbox Code Playgroud)
但是,是否有任何内置功能可以进行更广泛的检查。也欢迎对上述查询的任何输入。
提前致谢。
基于以下答案的最终查询:
select ..
where NOT REGEXP_LIKE (Column_Name_String,'^([a-zA-Z])[a-zA-Z0-9_]{0,29}$')
OR Column_Name_String is NULL
OR Upper(Column_Name_String) in (select Upper(RESERVED_WORDS.Keyword) from V$RESERVED_WORDS RESERVED_WORDS)
Run Code Online (Sandbox Code Playgroud)
特别不满意列名中像 $ 这样的字符,因此也不会使用..
dbms_assert.simple_sql_name('VALID_NAME')
Run Code Online (Sandbox Code Playgroud)
相反,使用正则表达式,我可以决定允许使用自己的一组字符。
我有这个SQL请求:
select T1.ID, T2.ID
from task t1, task t2
join workcase w on W.ID = T1.WORKCASE_ID
where W.ID = 1683964476
and T1.STATE < 501
and T2.STATE = 501
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我有这个错误:
ORA-00904: "T1"."WORKCASE_ID": invalid identifier
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
我创建了一个程序如下
create or replace procedure "GETCUSTNAMEZZz"
(cust_identifier1 IN NVARCHAR2(10))
is
begin
DBMS_OUTPUT.PUT_LINE (FNAME || ' ' || LNAME FROM customer WHERE cust_id=cust_identifier1)
end;
Run Code Online (Sandbox Code Playgroud)
然后我尝试调用该过程
BEGIN
GETCUSTNAMEZZz('C2') ;
END;
Run Code Online (Sandbox Code Playgroud)
这个sql给出了一个错误,标识符'GETCUSTNAMEZZZ'必须声明为ORA-06550:第3行,第5列:PL/SQL:语句被忽略"
这是我创建的确切过程,参数是正确的.
我究竟如何申报标识符?
提前致谢.
我有一个名为_VERSION_HISTORY的表,我在截断此表时出现了ORA-00911错误.Oracle允许名称以下划线(_)开头,但在截断时会抛出错误.这是一个愚蠢的错误吗?
create table ROOM
(NO_ROOM INT PRIMARY KEY, TYPE VARCHAR2(8) NOT NULL, SIZE VARCHAR2(8) NOT NULL)
;
Run Code Online (Sandbox Code Playgroud)
我得到ORA-00904,我认为问题来自NO_ROOM.我尝试使用NUMBER,它是一样的.
PS.我为没有房间类型和大小的房间做桌子.
我有这个Oracle表,用于存储应用程序设置.

这是用于创建表的SQL脚本:
CREATE TABLE "GLOBALSETTINGS"(
"SettingName" Varchar2(40 ) NOT NULL,
"SettingValue" Varchar2(40 )
)
/
-- Add keys for table GLOBALSETTINGS
ALTER TABLE "GLOBALSETTINGS" ADD CONSTRAINT "Key14" PRIMARY KEY ("SettingName")
/
ALTER TABLE "GLOBALSETTINGS" ADD CONSTRAINT "SettingName" UNIQUE ("SettingName")
/
Run Code Online (Sandbox Code Playgroud)
这是我想要使用的SQL语句:
UPDATE GLOBALSETTINGS
SET settingValue =
CASE
WHEN settingName = 'SessionTTL'
THEN '30'
WHEN settingName = 'MaxUsersActive'
THEN '40'
ELSE settingValue
END
WHERE settingName IN ('SessionTTL', 'MaxUsersActive');
Run Code Online (Sandbox Code Playgroud)
但是当我在SQL开发人员中运行它时,我收到以下错误消息:
Error starting at line 1 in command:
UPDATE GLOBALSETTINGS
SET settingValue = …Run Code Online (Sandbox Code Playgroud)