【问题标题】:combine procedure and cursor in sql在sql中结合过程和游标
【发布时间】:2016-06-09 04:17:57
【问题描述】:

这里是新手。

我正在尝试对 SQL 进行自学。 现在,我在组合过程和光标时遇到问题。

此案

案例

创建名为“sp4”的过程,接收来自用户输入的 StaffName 为每个名字的员工显示 StaffName 和 StaffPosition 包含用户输入的单词。 (创建过程,声明游标等)

这是我试过的代码

我的代码

CREATE PROCEDURE sp4 (@name VARCHAR(100))
AS
DECLARE cur2 CURSOR
SCROLL
FOR 
    SELECT StaffName, StaffPosition
    FROM MsStaff
    OPEN cur2
    DECLARE @pointer AS VARCHAR(100)
    FETCH NEXT FROM cur2 INTO @pointer
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SELECT StaffName, StaffPosition
        FROM MsStaff
        WHERE @pointer = @name
        AND StaffName LIKE '%' + @pointer + '%'

        FETCH NEXT FROM cur2 INTO @name
    END
    CLOSE cur2
    DEALLOCATE cur2

【问题讨论】:

  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或完全其他的东西。

标签: sql stored-procedures cursor procedure


【解决方案1】:

您的光标SELECT 语句指示SELECT StaffName, StaffPosition,但您的FETCH 语句不匹配(或彼此不匹配)。

FETCH 会将光标中的数据加载到内存变量中。因此,您需要为SELECT 中指示的每一列提供一个变量。例如,如果您有

DECLARE @staffName VARCHAR(100)
DECLARE @staffPosition VARCHAR(100)

然后您可以将 both 替换为:

FETCH NEXT FROM cur2 INTO @staffName, @staffPosition

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2020-07-14
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多