任何人都可以让我知道,如何使用 spring 数据 JPA 检索特定列的最大值。
我一直在尝试使用 spring 数据 JPA 参考文档中给出的 findTopByOrderByIdDesc 方法,但我得到“'limit'异常附近的语法不正确。
来自 spring 数据 JPA 的方法签名是
用户 findTopByOrderByAgeDesc();
并且我正在尝试使用相同的方法签名,这里该方法不希望传递任何参数,但根据可以的异常,我传递了限制。
甚至我尝试将方法名称更改为 User findTop1ByOrderByIdDesc();
但这确实有效。我不想使用 @Query("some query")
public User getmaxSequence() {
User user=new User();
try {
user= userRepository.findTopByOrderByIdDesc();
}catch(Exception e) {
e.printStackTrace();
}
return user;
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我低于异常堆栈跟踪。
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'limit'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:254)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1608)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:578)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:508)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7240)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2869)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:243)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:218)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:434)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60)
... 150 more
Run Code Online (Sandbox Code Playgroud) 我想要一个返回连接字符串的函数。在 postgresql 中执行此函数后出现以下错误。
CREATE OR REPLACE FUNCTION getTableName ()
RETURNS text AS $$
DECLARE
state_short_name text;
BEGIN
state_short_name := (select lower(state_short_name) from mst_state where state_code in (SELECT substr(entity_code,1,2) FROM shg_detail_share WHERE entity_code = '3420006002001'))
RETURN (CONCAT(state_short_name, '_shg_detail'));
END;
$$ LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)
我希望输出像'jh_shg_detail',但我收到这样的错误
Run Code Online (Sandbox Code Playgroud)ERROR: syntax error at or near "(" LINE 9: RETURN (CONCAT(state_short_name, '_shg_detail'));
使用批量收集或常规合并更新?
我试图通过使用批量收集和正常合并来检查更新的性能。我看到当我们在匿名块中使用简单合并时,性能会更好。使用批量收集时,需要花费更多时间。
如果正常更新(合并)比批量收集快,那么为什么Oracle引入了它?我们在哪里真正看到批量收集的好处?
declare
l_start integer;
l_end integer;
begin
l_start := dbms_utility.get_time;
merge into test111 t1
using test112 t2
on (t1.col1 = t2.col3)
when matched then update
set t1.col2 = t1.col2*5;
l_end := dbms_utility.get_time;
dbms_output.put_line(l_end - l_start);
end;
Run Code Online (Sandbox Code Playgroud)
declare
type nt_test is table of test112.col3%TYPE;
nt_val nt_test := nt_test();
cursor c is select col3 from test112;
c_limit integer := 100;
l_start integer;
l_end integer;
begin
l_start := DBMS_UTILITY.get_time;
open c;
loop
fetch c
bulk collect into nt_val limit c_limit;
exit …Run Code Online (Sandbox Code Playgroud) 如果转换成功,则T-SQL中的TRY_CONVERT()将返回一个转换为指定数据类型的值;否则它将返回NULL。
ORACLE中是否有类似的功能或重现此行为的方法?
在审查了许多数据库设计之后,我仍然不确定什么是最好的方法。我正在设计一个数据库,其中大多数实体具有不同的状态。例如我可能有类似的东西
我在思考两种不同的选择。
1)为每个实体创建一个“状态”表
CREATE TABLE UserStatus(
UserStatusID int,
Description varchar(255)
);
CREATE TABLE OrderStatus(
OrderStatusID int,
Description varchar(255)
);
Run Code Online (Sandbox Code Playgroud)
2)为所有实体创建一个共享状态表
CREATE TABLE Status(
StatusID int,
Description varchar(255)
);
Run Code Online (Sandbox Code Playgroud)
如果您能解释哪个选项更好或每个选项的优点,我将不胜感激
下面 2 个语句给出 2 个不同的结果
SELECT t.EID,t.name, ROW_NUMBER() OVER(ORDER BY 1) AS ROW_NUM
FROM ESWAR t
;
Run Code Online (Sandbox Code Playgroud)
SELECT t.EID,t.name, ROW_NUMBER() OVER(ORDER BY 1) AS ROW_NUM
FROM ESWAR t
;
Run Code Online (Sandbox Code Playgroud)
EID NAME ROW_NUM
2 Ram 1
1 Siva 2
3 Deva 3
Run Code Online (Sandbox Code Playgroud)
SELECT t.EID, t.name,ROW_NUMBER() OVER(ORDER BY t.EID) AS ROW_NUM
FROM ESWAR t
;
Run Code Online (Sandbox Code Playgroud) 我创建了一个新列 S_TEST 并将其默认值设置为 2 并保存表,但不幸的是旧记录没有自动设置,而是它们具有 NULL 值。看我的截图。


我有一个表,目前所有列都存储为 nvarchar(max),所以我将所有数据类型转换为它们应该是的。我有一列日期,但是当我运行它时:
ALTER TABLE Leavers ALTER COLUMN [Actual_Termination_Date] date;
Run Code Online (Sandbox Code Playgroud)
我得到
"Conversion failed when converting date and/or time from character string".
Run Code Online (Sandbox Code Playgroud)
这是比较正常的,所以我做了以下调查:
SELECT DISTINCT TOP 20 [Actual_Termination_Date]
FROM LEAVERS
WHERE ISDATE([Actual_Termination_Date]) = 0
Run Code Online (Sandbox Code Playgroud)
返回:
NULL
13/04/2017
14/04/2017
17/04/2017
19/04/2017
21/04/2017
23/04/2017
24/04/2017
26/04/2017
28/04/2017
29/03/2017
29/04/2017
30/04/2017
31/03/2017
42795
42797
42813
42817
42820
42825
Run Code Online (Sandbox Code Playgroud)
null 和 excel 样式的日期格式(例如 42795)没有问题,但是我遇到了问题,这些日期显示为完全正常的日期。我通常使用以下修复方法之一来解决此类问题:
SELECT cast([Actual_Termination_Date] - 2 as datetime)
FROM LEAVERS
WHERE ISDATE([Actual_Termination_Date]) = 0
Run Code Online (Sandbox Code Playgroud)
或者
SELECT cast(convert(nvarchar,[Actual_Termination_Date], 103) - 2 as datetime)
FROM LEAVERS …Run Code Online (Sandbox Code Playgroud) 我想/在我的 Java 程序中使用。
但我正在寻找一个变量常量——比如File.separator(它给出\)。
有没有办法防止从表中选择,比如在 9 到 5 之间允许选择,否则不返回任何内容?
触发器用于 DML、DDL、数据库操作。
用程序来做,并检查时间/其他条件是否正确?
或者有没有更简单的方法来防止选择?
sql ×7
oracle ×3
sql-server ×3
plsql ×2
bulkinsert ×1
concat ×1
ddl ×1
hibernate ×1
java ×1
oracle11g ×1
plpgsql ×1
postgresql ×1
row-number ×1
sqldatatypes ×1
t-sql ×1