sql - UDF 返回不同的 SQL 语句
问题描述
我试图根据 IF 条件在 UDF 中返回两个不同的 SQL 语句。到目前为止,我还不能正确地做到这一点,下面的代码不起作用。我怎样才能做到这一点?
CREATE FUNCTION BELSIZE.TEST (aSTRING VARCHAR(50))
RETURNS TABLE(
column1 INTEGER
, column2 INTEGER
, column3 VARCHAR(50)
)
------------------------------------------------------------------------
F1: BEGIN ATOMIC
DECLARE v_string VARCHAR(50);
SET v_string = aSTRING;
IF v_string = '123' THEN
With v (column1, column2, column3) as (
VALUES (1, 10231011, 'PRINCIPAL')
, (1, 10231012, 'ADDITIONAL')
, (-1, 10231031, 'REDEEM')
) select * from v;
END IF;
RETURN
With v (column1, column2, column3) as (
VALUES (1, 10231011, 'PRINCIPAL 456')
, (1, 10231012, 'ADDITIONAL 456')
, (-1, 10231031, 'REDEEM 456')
) select * from v;
END
谢谢。
解决方案
由于您需要基于输入字符串的 2 个不同的结果,因此您的返回语句应该在IF-ELSE
逻辑上。您处理它的方式在您的查询中是错误的。它总是试图返回返回块中的那个。
我已经更正了符合您要求的查询。使用其中的IF-ELSE
逻辑。它写在SQL-SERVER
CREATE FUNCTION dbo.testFn(@aSTRING VARCHAR(50))
RETURNS @rtnTable TABLE(
column1 INTEGER
, column2 INTEGER
, column3 VARCHAR(50)
)
AS
BEGIN
IF @aSTRING = '123'
BEGIN
INSERT INTO @rtnTable
VALUES (1, 10231011, 'PRINCIPAL')
, (1, 10231012, 'ADDITIONAL')
, (-1, 10231031, 'REDEEM')
END
ELSE
BEGIN
INSERT INTO @rtnTable
VALUES (1, 10231011, 'PRINCIPAL 456')
, (1, 10231012, 'ADDITIONAL 456')
, (-1, 10231031, 'REDEEM 456')
END
RETURN
END
推荐阅读
- java - 如何知道arraylist是否包含对象属性中的值?
- google-apps-script - 如何检索可共享链接的列表?
- sql - 为什么我的级联删除在 PostgreSQL 中不起作用?
- python - z3 规划问题和阻塞世界
- r - 如何将以下代码包装到 R 中的 for 循环中?
- google-apps-script - 用户驱动器在没有共享文件的情况下的使用情况
- javascript - Javascript 代码有太多的 if 语句,我需要一个替代方案
- powershell - 通过 csv 文件问题将新打印机添加到新打印服务器
- java - 在 WEAR OS 上启动 gmap 所需的 READ_SETTINGS 权限
- angular - 使用 FAB 启动导航器