标签: database-trigger

我可以从postgres触发器执行cURL调用吗?

我必须在db字段上创建一个特定状态的进程调用.我听说你可以使用数据库触发器执行cURL调用,但谷歌不太友好地返回我可以使用的任何东西.

所以我想我的问题分为三个部分:

  1. 可以这样做吗?
  2. 参考?
  3. 替代方案?

工作流程:

db字段用状态更新,需要启动脚本/请求/进程,运行我的工作流程中的下一步(这是一个PHP脚本),它将拉入记录在数据库中并处理另一步,然后更新数据库结果.

php database postgresql triggers database-trigger

2
推荐指数
1
解决办法
6100
查看次数

如何从SQL Server触发器调用restful服务

我需要使用SQL Server数据库表中的insert事件中的单个参数调用restful Web服务.我知道这不是理想的设计,但我无法控制任何一个终点.在最大负载下,此功能的使用不会超过100个事件/分钟.

我对其他想法持开放态度,但我想出的两个选择是;

  1. 插入触发器 - 服务代理 - 用于调用Web服务的.NET Windows服务
  2. C#CLR触发器直接调用restful服务

我一直在研究选项2并在Visual Studio中创建了一个SQL CLR触发器项目但是在我添加System.Web对项目的引用之后将不会构建并且没有构建错误,而只是在输出窗口中说"构建失败".

是否可以在CLR触发器中使用哪些CLR库?

使用服务代理让我感到害怕,因为我只与服务代理一起处理过一个项目,发现很难实现.

关于如何从触发事件调用Web服务的任何想法将不胜感激.

大卫

c# sql-server rest database-trigger

2
推荐指数
1
解决办法
2967
查看次数

我可以在Oracle的BEGIN触发语句之后声明一个CURSOR吗?

我需要在触发器中基于以下条件在BEGIN语句之后创建一个CURSOR:

IF :OLD.DWF_STATUS = 'P' AND :NEW.DWF_STATUS = 'C' THEN

    DECLARE CURSOR cur_list IS
        SELECT DISTINCT DR_PRJ_ID, STR_EMAIL, DWFU_US_ID
        FROM DOC_WORKFLOW JOIN DOC_WF_USERS ON DWFU_DWF_ID = DWF_ID
        JOIN DOCUMENT_REF ON DWF_DR_ID = DR_ID AND DR_TYPE = 'P'
        LEFT OUTER JOIN ST_REGISTER ON STR_ID = DWFU_STR_ID
        WHERE DWF_ID = :NEW.DWF_ID;

END IF;
Run Code Online (Sandbox Code Playgroud)

当我编译时,我收到此错误:

错误(99,5):PLS-00103:遇到以下其中一项时遇到符号"END":
begin function pragma procedure子类型
当前游标删除存在之前

如何在Oracle中触发BEGIN语句后声明游标?

oracle plsql database-trigger

2
推荐指数
1
解决办法
484
查看次数

包含创建日期的所有表的Postgresql触发器

我的postgresql数据库中有54个表.并且大多数表包括创建数据的日期.我想为包含CreatedDate列的所有表创建一个全局触发器.插入记录时,此触发器将更新列.

postgresql database-trigger

1
推荐指数
2
解决办法
1503
查看次数

在postgres中创建一个触发器

我正在尝试通过pgadmin创建一个触发器,以便有一个计算列.

我需要这样做:c = a/b

我创建了一个函数UpdateC,它包含以下代码:

UPDATE table_name
SET c = a / b
WHERE id = @id
Run Code Online (Sandbox Code Playgroud)

我将@id声明为参数.

然后我想我会创建一个触发器并将它链接到该函数,但我发现我需要将它链接到触发器函数而不是函数.

现在我正在尝试使用与上面完全相同的SQL创建触发器函数,但是我收到了下一个错误:

"UPDATE"或其附近的语法错误

在定义选项卡下我必须选择一种语言,所以我选择了"plpgsql"(其他选项是"c"和"internal").

任何帮助将深表感谢!

sql database postgresql database-trigger pgadmin

1
推荐指数
1
解决办法
2126
查看次数

插入触发器是否需要提交语句

这是实际情况的简化;在哪里可以看到表B上缺少的记录。

假设有两个数据库表A;B.

表A上有一个on insert触发器;它可以对表B进行插入(但它没有COMMIT;)。如果我们通过JDBC连接器打开数据库连接;并在表A上插入;并提交;触发器的行为是什么?是否将它自动提交到表B上的插入语句?

oracle database-trigger

1
推荐指数
2
解决办法
4109
查看次数

带条件的 SQL Server 索引

我有Range带列的表

Start (date), RangeTypeId (integer), ChannelId (integer), IsActive (bit)
Run Code Online (Sandbox Code Playgroud)

我有这个索引:

CREATE UNIQUE NONCLUSTERED INDEX [IX_Range_Unique] 
ON [dbo].[Range] ([Start] ASC, [RangeTypeId] ASC, [ChannelId] ASC, [IsActive] ASC)
Run Code Online (Sandbox Code Playgroud)

我希望我的索引仅在 2 行带有IsActive = 1. 所以,我想指数或某种触发,将允许有多个的RangesIsActive = 0和相同的开始日期,频道标识和类型,但只有一个IsActive = 1和相同的开始日期,频道标识和类型。

有效的数据库表状态示例:

Start | RangeTypeId | ChannelId | IsActive
------------------------------------------
23:00        5           1          0  
23:00        5           1          0  
23:00        5           1          0  
23:00        5           1          1  
Run Code Online (Sandbox Code Playgroud)

无效的:

Start | RangeTypeId | ChannelId | IsActive
------------------------------------------
23:00 …
Run Code Online (Sandbox Code Playgroud)

sql-server indexing database-trigger

1
推荐指数
1
解决办法
4436
查看次数

多次插入后使用触发器更新日志表

我有以下触发器:

ALTER TRIGGER [Staging].[tr_UriData_ForInsert]
ON [Staging].[UriData]
FOR INSERT 
AS
BEGIN
    DECLARE @_Serial NVARCHAR(50)
    DECLARE @_Count AS INT

    IF @@ROWCOUNT = 0
        RETURN

    SET NOCOUNT ON;

    IF EXISTS(SELECT * FROM inserted)
    BEGIN
        SELECT @_Count = COUNT(Id) FROM inserted
        SELECT @_Serial = SerialNumber FROM inserted

        INSERT INTO [Staging].[DataLog]
        VALUES (CURRENT_TIMESTAMP, @_Serial + ': Data Insert --> Rows inserted: ' + @_Count, 'New data has been received')
    END 
END
Run Code Online (Sandbox Code Playgroud)

该表一次接收多行.我希望能够在日志表中添加一行告诉我插入已经发生.

插入一行时效果很好,但是有多行,触发器不会触发.我在这里阅读了其他项目,很明显你不应该使用ROW_NUMBER().

总结:我想在另一个名为UriData的表中发生多行插入时更新我的​​日志表.

使用以下内容从C#插入数据:

using (var sqlBulk = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, transaction)) …
Run Code Online (Sandbox Code Playgroud)

sql sql-server triggers database-trigger

1
推荐指数
1
解决办法
65
查看次数

触发计数行给出ORA-04091:表是变异的,触发器/函数可能看不到它

更新我的表时出现此错误

 UPDATE "Username"."EMPPROJECT" 
 SET ENDDATE = TO_DATE('2016-09-11 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
 WHERE ROWID = 'AAF+8XAAEAAGBIGAAB'
   AND ORA_ROWSCN = '537035617'
Run Code Online (Sandbox Code Playgroud)

保存对表"Username"的更改时出错."EMPPROJECT":第8行:
ORA-04091:表Username.EMPPROJECT正在变异,触发器/函数可能看不到它ORA-06512:在"Username.CHECKOVERLAPDATEUPDATE",第4行
ORA-04088 :执行触发器'Username.CHECKOVERLAPDATEUPDATE'时出错

触发器的定义如下:

create or replace trigger checkOverlapDateUpdate 
before Update on EmpProject
for each row
declare
    countOfOverlap integer;
begin
    select count(*) 
    into countOfOverlap 
    from EmpProject EP 
    where isOverlapping(:new.startDate, :new.endDate, startDate, endDate) = 1 
      and EP.EmpID = :new.EmpId;

    if countOfOverlap > 0 
    then
        RAISE_APPLICATION_ERROR(-00000, 'Overlapping Insertion Dates');
        rollback;
    end if;
end;
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql database-trigger sql-update

1
推荐指数
1
解决办法
180
查看次数

一个表的UPDATE触发器,该表每天在特定记录集上更新数千次

我正在寻找对公司表之一中非常特定的记录子集进行更改的方法。我意识到更新触发器可以完成此任务,但是一天要调用数千次。

虽然我相当精通SQL,但是T-SQL和触发器在我的常规操场之外有点。我不想写一些会持续运行且几乎无法完成的事情(或使我们的DBA烦恼)。

似乎解决方案将是仅拉出我感兴趣的行,然后基于此写触发器的视图。看来这是“不良形式”,它告诉我有一种更好的方法来完成同一件事。

我正在寻找使用触发器的原因,因为我正在寻找可能会很快重置的值更改。(例如,它将更改为1,然后在几个小时后更改回0)。

此触发器将在SQL SERVER EXPRESS 10.50.4000上运行

我主要只是需要一个方向-不需要太多特定的代码。

t-sql sql-server database-trigger

1
推荐指数
1
解决办法
42
查看次数