我必须跟踪表中记录的修订.我所做的是创建一个继承自第一个表的第二个表并添加一个修订计数器.
CREATE TABLE A (
id SERIAL,
foo TEXT,
PRIMARY KEY (id));
CREATE TABLE B (
revision INTEGER NOT NULL) INHERITS (A);
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个触发器,每次插入/更新A时都会更新表B. 我无法弄清楚的是如何使B.revision为每个id保持一个单独的"序列".
示例:表A有2行,i和j.
我已经更新了3次,应该有3次修订:(1,2,3).
j已更新2次,应该有两次修订:(1,2).
这是我到目前为止所做的,也许我走错了路,有人可以帮助我!
CREATE OR REPLACE FUNCTION table_update() RETURNS TRIGGER AS $table_update$
DECLARE
last_revision INTEGER;
BEGIN
SELECT INTO last_revision MAX(revision) FROM B WHERE id = NEW.id;
IF NOT FOUND THEN
last_revision := 0;
END IF;
INSERT INTO B SELECT NEW.*;
RETURN NEW;
END;
$table_update$ LANGUAGE plpgsql;
CREATE TRIGGER table_update
AFTER INSERT OR UPDATE ON A …Run Code Online (Sandbox Code Playgroud) 为什么在相反的情况下我们不能在函数内执行存储过程?
我只是想创建一个返回select语句的函数,但它给出了错误:
带有返回值的RETURN语句不能在此上下文中使用.
这是我的代码:
CREATE FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS TABLE
AS
BEGIN
RETURN(
SELECT * FROM View_sls
)
Run Code Online (Sandbox Code Playgroud)
请让我知道解决方案
CREATE FUNCTION [dbo].[udfGetNextEntityID]
()
RETURNS INT
AS
BEGIN
;WITH allIDs AS
(
SELECT entity_id FROM Entity
UNION SELECT entity_id FROM Reserved_Entity
)
RETURN (SELECT (MAX(entity_id) FROM allIDs )
END
GO
Run Code Online (Sandbox Code Playgroud)
SQL不是我的强项,但我无法弄清楚我在这里做错了什么.我希望函数从2个表的并集中返回最大的entity_id.运行脚本会出错:
Incorrect syntax near the keyword 'RETURN'.
Run Code Online (Sandbox Code Playgroud)
我查看在功能中使用CTE是否有一些限制,但找不到任何相关的东西.我该如何纠正?
是否可以通过数据库中的sql函数对Entity Framework进行排序?我的意思是:
var xx = DbContext.Set<Article>()
.Where(x=>x.Name.Contains("X")).OrderBy("[dbo].[MySQLFunction]");
Run Code Online (Sandbox Code Playgroud) 我试图直接通过MySQL从我的所有记录中删除HTML标记.感谢StackOverflow的这个问题,我找到了以下函数,这种函数可以去掉html标签 -
SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS fnStripTags;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty varchar(4000) )
RETURNS varchar(4000)
DETERMINISTIC
BEGIN
DECLARE iStart, iEnd, iLength int;
WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO
BEGIN
SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));
SET iLength = ( iEnd - iStart) + 1;
IF iLength > 0 THEN
BEGIN
SET Dirty …Run Code Online (Sandbox Code Playgroud) 我正在尝试连接许多列并用逗号分隔,如下所示:
Column
------
abc
bcd
bgd
abc
Run Code Online (Sandbox Code Playgroud)
预期输出: abc,bcd,bgd
我正在使用此代码:
CREATE FUNCTION concatinate(@PK uniqueidentifier)
RETURNS varchar(max)
AS
BEGIN
DECLARE @result varchar(max)
SELECT @result = ISNULL(@result + ', ', '') + Column
FROM table
Run Code Online (Sandbox Code Playgroud)
我得到的结果是
abc,bcd,bgd,abc
Run Code Online (Sandbox Code Playgroud)
我不能只选择不同的值。请指导。
我的应用程序需要在Postgres,Mysql和测试Hsqldb之间移植.我已经设置了Flyway来为这三个提供一些自定义函数,我现在想在我的SQL/HQL查询中使用它们.
我目前的设置是使用Dialect我在之间切换的单独的s application-{profile}.yml; 哪个有效,但函数声明需要在各种方言之间重复,并且感觉不是最理想的.
看着15.29.Hibernate文档中的非标准化函数,它说我应该使用org.hibernate.cfg.Configuration#addSqlFunction(),它似乎更便携,并且无需扩展所有三种方言.
我的问题是:如何Configuration在Spring Boot(1.3)应用程序中访问Hibernate 类?默认情况下没有bean可以注入,也没有LocalSessionFactoryBeanbean.
任何人都可以指出我正确的方向,或以其他方式注册我的SQL函数一次?
我有一个基于SQL的报告,我正在从Crystal Reports迁移到SSRS.旧方法使用调用存储函数的存储过程.新方法的目的是将所有报告逻辑嵌入SSRS报告中.这背后的原因是存储过程和函数不是目标数据库的一部分.我们不希望有一个额外的数据库只包含一些存储的函数和过程.
现在的基本结构是:
select (a bunch of fields)
from (a bunch of joins)
where (conditions)
and specific_value in (select value
from stored_function(inputs)
)
Run Code Online (Sandbox Code Playgroud)
存储的函数执行一些分隔符处理.我需要在SSRS运行此只,没有在数据库中存储任何东西.我可以将存储过程转换为SSRS中的数据集,但我无法弄清楚如何处理stored_function.
-----编辑-----以下是问题中的代码:
CREATE FUNCTION [dbo].[fn_split] (
@SourceString sql_variant,
@Delimiter nvarchar(10) = N',')
RETURNS @Values TABLE(Position smallint IDENTITY, cValue varchar(2000) , ncValue nvarchar(2000))
AS
BEGIN
DECLARE @NormalString varchar(2000), @NationalString nvarchar(2000),
@NormalDelimiter varchar(10), @NationalDelimiter nvarchar(10),
@IsNationalChar bit, @Position int,
@NormalValue varchar(2000), @NationalValue nvarchar(2000)
SET @Delimiter = COALESCE(@Delimiter, N',')
SET @IsNationalChar = CASE
WHEN SQL_VARIANT_PROPERTY(@SourceString,'BaseType') IN ('char','varchar')
THEN …Run Code Online (Sandbox Code Playgroud) sql-server stored-procedures sql-function reporting-services
我正在尝试运行此查询,直到不久前才能够运行。我不知道出了什么问题,我现在开始收到此错误?
Your database returned: ERROR: set-returning functions are not allowed in CASE Hint: You might be able to move the set-returning function into a LATERAL FROM item.
我的查询:
SELECT distinct
(CASE
WHEN {PERIOD} = 'Previous Quarter' AND pto.pto_start_date < (date_trunc('quarter', now() - INTERVAL '1 month') + INTERVAL '1 month')::date AND pto.pto_end_date >= (date_trunc('quarter', now() - INTERVAL '1 month') + INTERVAL '1 month')::date
THEN generate_series(pto.pto_start_date, pto.pto_end_date, '2 day'::interval)
WHEN {PERIOD} = 'Current Quarter' AND pto.pto_start_date < (date_trunc('quarter', now() - INTERVAL '1 …Run Code Online (Sandbox Code Playgroud) sql-function ×10
sql ×4
sql-server ×4
postgresql ×2
c# ×1
chartio ×1
hibernate ×1
mysql ×1
plpgsql ×1
revisions ×1
spring-boot ×1
sql-update ×1
t-sql ×1
triggers ×1