sql - 使用游标循环将 PL SQL 函数转换为 T-SQL 并获取
问题描述
该函数的代码如下:
CREATE OR REPLACE FUNCTION FTTH_GETBUSZONECODEMULTI(
p_house_nbr IN VARCHAR2,
p_as_of_date IN DATE DEFAULT SYSDATE)
RETURN VARCHAR2
AS
CURSOR l_get_cur
IS
SELECT
LTRIM(RTRIM(BZO.B2FEDC)) BusinessZoneCode
FROM
[not wasting your time with business logic]
l_return VARCHAR2(32767);
BEGIN
--
FOR l_get_rec IN l_get_cur LOOP
l_return := l_return || '|' || l_get_rec.BusinessZoneCode;
END LOOP;
--
CASE
WHEN l_return IS NULL THEN RETURN NULL;
ELSE RETURN l_return || '|';
END CASE;
--
END FTTH_GETBUSZONECODEMULTI;
我的翻译尝试如下:
CREATE FUNCTION ftth_GETBUSZONECODEMULTI(
@p_house_nbr VARCHAR(4000),
@p_as_of_date DATETIME)
RETURNS VARCHAR(4000)
AS
BEGIN
SET @p_as_of_date = GETDATE()
DECLARE l_get_cur CURSOR LOCAL
FOR
SELECT
LTRIM(RTRIM(BZO.B2FEDC)) BusinessZoneCode
FROM
[not wasting your time with business logic]
DECLARE @l_return VARCHAR(MAX);
--
SET @l_return = isnull(@l_return, '') + '|' + ISNULL((FETCH BusinessZoneCode from l_get_cur), '');
--
if @l_return IS NULL begin RETURN NULL END
if @l_return is not null BEGIN RETURN isnull(@l_return, '') + '|' END;
END
我认为,问题在于我如何尝试获取该值-即使我在其中放置了“NEXT”,它也无法正常工作。我已经尝试了 6 种不同的方式来安排 FETCH,但它们都不起作用。
解决方案
这是光标使用的一些变化,我可能在光标循环结束的地方错了,所以你可能需要调整它:
CREATE FUNCTION ftth_GETBUSZONECODEMULTI(
@p_house_nbr VARCHAR(4000),
@p_as_of_date DATETIME)
RETURNS VARCHAR(4000)
AS
BEGIN
declare @BusinessZoneCode varchar(500)
SET @p_as_of_date = GETDATE()
DECLARE l_get_cur CURSOR LOCAL
FOR
SELECT
LTRIM(RTRIM(BZO.B2FEDC)) BusinessZoneCode
FROM
[not wasting your time with business logic]
OPEN l_get_cur
fetch next from l_get_cur
into @BusinessZoneCode
WHILE @@FETCH_STATUS = 0
begin
DECLARE @l_return VARCHAR(MAX);
--
SET @l_return = isnull(@l_return, '') + '|' + ISNULL((@BusinessZoneCode), '');
--
if @l_return IS NULL begin RETURN NULL END
if @l_return is not null BEGIN RETURN isnull(@l_return, '') + '|' END
fetch next from l_get_cur
into @BusinessZoneCode
end
close l_get_cur
deallocate l_get_cur
END
推荐阅读
- c# - 从第三方网站重定向回 wpf 应用程序
- python - MLP的Hessian矩阵wrt参数不对称(TF2.0)
- javascript - 如何使用 javascript 获取已安装的 chrome 扩展列表
- python - 如何通过以元组为参数的函数比较两个变量?
- asp.net - Excel下载未从服务器发生
- dicom - 使用 DCMTK 读取 DICOM 文件的内容序列标签时出现问题
- python - 如何在列出的特定时间运行代码
- python - Django 导出 CSV 给出 HttpResponse 错误
- r - 使用 R 处理一个简单的文本序列以提取所需的输出 nx 1 数据帧
- netty - 如何通过 DTLS 发送数据?