【问题标题】:SQL Anywhere Syntax error near @@ 附近的 SQL Anywhere 语法错误
【发布时间】:2013-08-09 22:51:59
【问题描述】:

我在 ASA 11 中使用存储过程。 例子:

CREATE PROCEDURE "DBA"."pa_select_employ"(
        @cod nVARCHAR(10),
        @name nvarchar(15) OUTPUT)
BEGIN
    SELECT @name=name_employ FROM EMPLOY //the line 6
    WHERE COD_EMPLOY=@cod
END

发送变量@cod 并需要结果@name OUTPUT

无法保存但显示消息:

无法在数据库中修改过程“xxx”。句法 第 6 行的“@name”附近出错 [Sybase][ODBC 驱动程序][SQL Anywhere]语法 第 6 行“@name”附近的错误 SQLCODE: -131 SQLSTATE: 42000

在 Interactive SQL 中,选择正常。

DECLARE @name varchar(15)
 SELECT @name=name_employ FROM EMPLOY
    WHERE COD_EMPLOY='333333' 

请帮我找出语法错误? (我会说西班牙语。)

【问题讨论】:

  • “帮助,我会说西班牙语” - 抱歉,我帮不了你。 ;)
  • @hcovenas 在您收到语法错误的那一行,您是否尝试从 EMPLOY 中选择 name_employ 并为其赋予别名“@name”?
  • 是的,name_employ 是列(表EMPLOY)@name 是RETURN 的var

标签: sql select stored-procedures sqlanywhere


【解决方案1】:

尝试将过程定义更改为:

CREATE PROCEDURE "DBA"."pa_select_employ"(
    IN @cod nVARCHAR(10),
    OUT @name nvarchar(15))
BEGIN
    SELECT @name=name_employ FROM EMPLOY //the line 6
    WHERE COD_EMPLOY=@cod
END

【讨论】:

    【解决方案2】:

    是的,生产过程如何,但在 Powerbuilder 中显示错误 ERRORSQLSTATE = S1105
    [Sybase][ODBC Driver]Invalid parameter type

    DECLARE pa_find_name PROCEDURE FOR pa_select_employ
    cod =:sle_cod.text, //input
    name =: sle_name.text ; //out
    EXECUTE pa_find_name;

    IF SQLCA.sqlcode0 THEN
    MESSAGEBOX("","ERROR" + SQLCA.sqlerrtext )
    如果结束

    【讨论】:

    • COD_EMPLOY 是数字字段吗?因为那么 nvarchar 数据类型确实是无效的。
    【解决方案3】:

    谢谢,解决了。尝试更改过程定义

    【讨论】:

    • 请您详细说明一下。
    猜你喜欢
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2016-03-12
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多