首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebird:修改表并从out C#创建存储过程

Firebird:修改表并从out C#创建存储过程
EN

Stack Overflow用户
提问于 2014-02-16 16:56:52
回答 1查看 1.5K关注 0票数 0

我正在尝试从out C#创建一个存储过程到FireBird2.1。守则是:

代码语言:javascript
复制
String sql = @"EXECUTE BLOCK AS BEGIN " +
    "ALTER TABLE EXAMPLE ALTER FIELD1 TYPE Char(50); " +
    "SET TERM ^ ; CREATE PROCEDURE name ( input_parameter_name < datatype>, ... )" + 
    "RETURNS ( output_parameter_name < datatype>, ... ) AS DECLARE VARIABLE variable_name < datatype>;" +
    "BEGIN /* write your code here */ END^ SET TERM ; ^" + 
    " END";

    public int Execute(string sql)
    {
        int result = 0;

        if (this.OpenConnection() == true)
        {
            FbTransaction transaction = Fbconnection.BeginTransaction();
            try
            {
                FbCommand command = new FbCommand(sql, Fbconnection, transaction);
                int rc = command.ExecuteNonQuery();
                result = rc;
                transaction.Commit();
            }
            catch (Exception e)
            {
                globals.logfile.log(e.ToString());
                globals.logfile.flush();
                result = 0;
            }
            finally
            {
                this.CloseConnection();
            }
        }
        return result;
    }

给出的错误消息是:

FirebirdSql.Data.FirebirdClient.FbException (0x80004005): 动态SQL错误SQL错误代码= -104令牌未知-第1行,第24列ALTER

一定是很小的东西,但我拿不到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-17 08:23:25

在PSQL中不允许DDL (存储过程、触发器、执行块),因此拒绝执行这样的ALTER TABLE

另外,SET TERM不是Firebird语句语法的一部分。它特定于查询工具(如isql和FlameRobin ),因为它们使用语句终止符(如; )来知道何时到达语句的结束并可以发送到服务器。在执行PSQL块时,这些工具需要监视不同的语句终止符,以防止它们向服务器发送不完整的语句。在实际的Firebird语句语法中,;只是PSQL块的一部分。

您需要单独执行ALTER TABLECREATE PROCEDURE,而不需要EXECUTE BLOCK

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21814366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档