我的主要密钥实体如下所示
@GeneratedValue(strategy= GenerationType.TABLE)
private Long id;
Run Code Online (Sandbox Code Playgroud)
当我跑,我得到错误
无法获取或更新下一个值;嵌套异常是org.hibernate.exception.SQLGrammerException:无法获取或更新下一个值
但是当我改变的时候
@GeneratedValue
private Long id;
Run Code Online (Sandbox Code Playgroud)
没有错误抛出.我想在oracle db 上为每个表生成唯一的主键.
我刚刚在Oracle中遇到了一个奇怪的行为,我期望ORA-00918被提升,但事实并非如此.例如,以此查询为例.
SELECT *
FROM USER_TABLES TAB
JOIN USER_TRIGGERS TRG ON TRG.TABLE_NAME = TAB.TABLE_NAME
WHERE STATUS = 'DISABLED'
Run Code Online (Sandbox Code Playgroud)
此查询在概念上寻找具有禁用触发器的表的详细信息,但请注意,这不是我想要解决的问题.该查询,数据字典,视图或表格不是唯一的问题; 据我所知,它适用于任何一组表或视图(从我试过的两三个).
无论如何,尝试运行此查询,你会得到ORA-00918,因为两者USER_TABLES并USER_TRIGGERS有一个名为列STATUS,从而得到查询运行WHERE条款需要更改到TRG.STATUS.好吧,很酷,但尝试加入另一张桌子.
SELECT *
FROM USER_TABLES TAB
JOIN USER_TRIGGERS TRG ON TRG.TABLE_NAME = TAB.TABLE_NAME
JOIN USER_CONSTRAINTS CON ON CON.TABLE_NAME = TAB.TABLE_NAME
WHERE STATUS = 'DISABLED'
Run Code Online (Sandbox Code Playgroud)
这个查询,没有限定你的意思是哪个STATUS列,神奇地工作!别介意语义或查询返回的内容,没有错误. USER_CONSTRAINTS甚至还有一个名称STATUS也是如此,所以当有两列可供选择时它怎么会不知道该怎么做但是它更加模棱两可呢?
顺便说一下,这一切都在10.2.0.3.0上,如果你的查询中有两个以上的表,ORA-00918就会停止被提升.如果这是一个Oracle错误,有人知道它何时被修复,那么如果我们的数据库升级,哪个Oracle版本可能会导致牛仔查询爆炸?
更新
感谢BQ用于演示该错误已在11.2.0.1.0中修复.任何可以在早期版本中修复它的人的赏金!
当我在SQL*Plus中运行select命令时,真的很烦人,例如:
SELECT * FROM books;
Run Code Online (Sandbox Code Playgroud)
输出格式错误且不可读(行单元格不在一行中,但由换行符等分隔):

如何配置它以更好的方式显示SELECT结果?
编辑:
这是我的login.sql文件内容:
SET ECHO OFF
SET SERVEROUTPUT ON SIZE 1000000
SET PAGESIZE 999
SET LINESIZE 132
Run Code Online (Sandbox Code Playgroud)
EDIT2:
Affer增加了LINESIZE:
SET LINESIZE 32000
Run Code Online (Sandbox Code Playgroud)
它现在看起来像这样:

我是Oracle的新手.我遇到了一个问题.
首先,我想检查sysman帐户的权限:
SQL> select * from dba_sys_privs where grantee='sysman';
no rows selected
Run Code Online (Sandbox Code Playgroud)
我知道这意味着我的视图dba_sys_privs中没有内容.但无论如何,我已经建立了一个数据库.所以,我再试一次,只是缩短声明:
SQL> select * from dba_sys_privs
2
Run Code Online (Sandbox Code Playgroud)
所以这是我的两个问题:
我的日期值存储为varchar2,值为15/August/2009,4:30 PM,如何将其转换为正确的日期格式,如DD-MM-YYYY.
我试图调试我的动态查询,dbms_output但似乎查询字符串对于dbms_output缓冲区来说太长了.
我有 :
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "SYS.DBMS_OUTPUT", line 148
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)
知道如何增加缓冲区大小吗?
我不能理解这个陈述 - 在谷歌搜索后不是eveN
pv_no_list :='23,34,45,56';
SELECT DISTINCT REGEXP_SUBSTR (pv_no_list,
'[^,]+',
1,
LEVEL)
no_list
FROM DUAL
CONNECT BY REGEXP_SUBSTR (pv_no_list,
'[^,]+',
1,
LEVEL) IS NOT NULL
我正在创建一个使用odp.net的.NET程序,特别是11g版本.我们的oracle服务器运行10g.我在开发过程中为时已晚,无法进行更改.我会遇到麻烦吗?您是否有过在10g服务器上运行11g客户端的经验?
问题可能过于简单,但我确实需要帮助.
我在Oracle 10g中创建了一个存储过程,但我无法调用它.我正在使用SQL Developer来管理数据库.
CREATE OR REPLACE
FUNCTION check_login
(username IN VARCHAR2, pwd IN VARCHAR2)
RETURN VARCHAR2
IS
isUserValid INTEGER;
BEGIN
SELECT Count(*) INTO isUserValid
FROM users
WHERE Username = username AND PASS_WORD = pwd;
return isUserValid;
END;
Run Code Online (Sandbox Code Playgroud)
我也尝试了这个:
CREATE OR REPLACE
PROCEDURE check_login
(username IN VARCHAR2, pwd IN VARCHAR2, RESULT OUT INTEGER)
IS
isUserValid INTEGER;
BEGIN
SELECT Count(*) INTO isUserValid
FROM users
WHERE Username = username AND PASS_WORD = pwd;
RESULT := isUserValid;
END;
Run Code Online (Sandbox Code Playgroud)
解析两者都不会给出任何错误消息.我使用以下语法来调用它们:
BEGIN
check_login('admin', 'admin');
END; …Run Code Online (Sandbox Code Playgroud) 开发时,我使用'test_1%'来查找'test_123'.但在生产环境中它不起作用.使用'escape'\''正在运行.是否需要在oracle中设置任何设置?我想在不逃避的情况下使用'\''.