如何在 Apache nifi 中执行 Begin-End Transact SQL 语句?
How to execute a Begin-End Transact SQL statements in Apache nifi?
我正在尝试在 Apache Nifi 中使用 Execute SQL 处理器执行一个 SQL 语句,中间有 Begin - End 和 Cursor。但这是抛出一个错误,告诉“无法执行 SQL select 查询”。如何在 nifi 中执行 transact SQL 语句?哪个处理器最适合这个?
下面是我要执行的 SQL 代码片段,
DECLARE @Cursor CURSOR
DECLARE @stlsn binary(10), @endlsn binary(10), @sequal binary(10), @op char, @upm varbinary(128), @rn numeric, @tg char(10), @ti char(10), @ln char(10), @dv char(10), @cid int
BEGIN
SET @Cursor = CURSOR FOR
SELECT * FROM cdc.dbo_SampleDB_CT
OPEN @Cursor
FETCH NEXT FROM @Cursor INTO @stlsn, @endlsn, @sequal, @op, @upm, @rn, @tg, @ti, @ln, @dv, @cid
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @op, @rn, @tg, @ti, @ln, @dv
IF @op= 1 Execute ('DELETE FROM dbo.NewDB WHERE RNo = '+@rn)
IF @op= 2 Execute ('INSERT INTO dbo.NewDB VALUES ('+@rn+','''+@tg+''','''+@ti+''','''+@ln+''','''+@dv+''')')
FETCH NEXT FROM @Cursor INTO @stlsn, @endlsn, @sequal, @op, @upm, @rn, @tg, @ti, @ln, @dv, @cid
END;
CLOSE @Cursor ;
DEALLOCATE @Cursor;
END;
这根本不需要是动态的。你可以做一个连接 DELETE
和一个 INSERT...SELECT...
.
您没有指定您的列名称,所以我在这里猜测了一点。
DELETE FROM n
FROM dbo.NewDB n
JOIN cdc.dbo_SampleDB_CT c ON c.RNo = n.RNo
WHERE c.__$operation = 1;
INSERT INTO dbo.NewDB
SELECT c.RNo,c.tg,c.ti,c.ln,c.dv
FROM cdc.dbo_SampleDB_CT c
WHERE c.__$operation = 2;
我注意到您还没有处理 CDC 更新行。
我正在尝试在 Apache Nifi 中使用 Execute SQL 处理器执行一个 SQL 语句,中间有 Begin - End 和 Cursor。但这是抛出一个错误,告诉“无法执行 SQL select 查询”。如何在 nifi 中执行 transact SQL 语句?哪个处理器最适合这个?
下面是我要执行的 SQL 代码片段,
DECLARE @Cursor CURSOR
DECLARE @stlsn binary(10), @endlsn binary(10), @sequal binary(10), @op char, @upm varbinary(128), @rn numeric, @tg char(10), @ti char(10), @ln char(10), @dv char(10), @cid int
BEGIN
SET @Cursor = CURSOR FOR
SELECT * FROM cdc.dbo_SampleDB_CT
OPEN @Cursor
FETCH NEXT FROM @Cursor INTO @stlsn, @endlsn, @sequal, @op, @upm, @rn, @tg, @ti, @ln, @dv, @cid
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @op, @rn, @tg, @ti, @ln, @dv
IF @op= 1 Execute ('DELETE FROM dbo.NewDB WHERE RNo = '+@rn)
IF @op= 2 Execute ('INSERT INTO dbo.NewDB VALUES ('+@rn+','''+@tg+''','''+@ti+''','''+@ln+''','''+@dv+''')')
FETCH NEXT FROM @Cursor INTO @stlsn, @endlsn, @sequal, @op, @upm, @rn, @tg, @ti, @ln, @dv, @cid
END;
CLOSE @Cursor ;
DEALLOCATE @Cursor;
END;
这根本不需要是动态的。你可以做一个连接 DELETE
和一个 INSERT...SELECT...
.
您没有指定您的列名称,所以我在这里猜测了一点。
DELETE FROM n
FROM dbo.NewDB n
JOIN cdc.dbo_SampleDB_CT c ON c.RNo = n.RNo
WHERE c.__$operation = 1;
INSERT INTO dbo.NewDB
SELECT c.RNo,c.tg,c.ti,c.ln,c.dv
FROM cdc.dbo_SampleDB_CT c
WHERE c.__$operation = 2;
我注意到您还没有处理 CDC 更新行。