PG数据库存储过程包含存储过程报语法错误,麻烦大神看看是啥问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PG数据库存储过程包含存储过程报语法错误,麻烦大神看看是啥问题?相关的知识,希望对你有一定的参考价值。

CREATE OR REPLACE Procedure t_cks_test(in_id in numeric ,out_tail inout Varchar) as$body$DECLAREv_id NUMERIC :=0;beginProcedure t_cks_test_o(i_id in NUMERIC) as beginv_id := i_id+1000::numeric;end ;v_id :=in_id;if v_id >1 thenout_tail :='未调存过';end if;end;$body$LANGUAGE plpgsql如图中报错,麻烦大神看看是什么问题,谢谢。

参考技术A --改成这样 你的insert语法有问题 你可以显示出来看看
alter PROCEDURE [dbo].[LP_TABLE_1]
( @Name VARCHAR(20))
AS
BEGIN
DECLARE @sqlStr NVARCHAR(2000);
SET @sqlStr = 'INSERT INTO Table_1 (name) VALUES ('+'''' + @Name + ''''+')'
EXECUTE (@sqlStr)
--print (@sqlStr)
END

如何在mysql数据库中创建一个包含请求的存储过程

【中文标题】如何在mysql数据库中创建一个包含请求的存储过程【英文标题】:how to create a stored procedure containing request where not exists in mysql database 【发布时间】:2015-06-25 09:57:19 【问题描述】:

我对“不存在的地方”的请求有疑问 错误是:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 附近 'WHERE NOT EXISTS(从用户中选择 1(WHERE Matricule = @Matricule AND mot_d' 在第 11 行

这是我的程序

create procedure usp_testInsert(
    Matricule int,
    mot_de_passe varchar(10),
    Nom varchar(10) ,
    Prenom varchar(10)
) begin
    INSERT INTO users (
        Matricule,
        mot_de_passe,
        Nom,
        Prenom)
    SELECT
        @Matricule, 
        @mot_de_passe, 
        @Nom, 
        @Prenom 
    WHERE 
        NOT EXISTS (
            SELECT 1 
            FROM users ( 
            WHERE 
                Matricule = @Matricule AND 
                mot_de_passe = @mot_de_passe AND 
                Nom = @Nom AND Prenom = @Prenom
            )
        );
end

【问题讨论】:

【参考方案1】:

存储过程中的一些问题:

重要的是指出9.4. User-Defined Variables和例程参数13.1.15. CREATE PROCEDURE and CREATE FUNCTION Syntax之间的区别是不同的变量。

避免将参数或变量命名为表的列。

语法:

DELIMITER //

create procedure usp_testInsert (
        Matricule int,
        mot_de_passe varchar(10),
        Nom varchar(10) ,
        Prenom varchar(10)
)
begin
        INSERT INTO users (Matricule, mot_de_passe, Nom, Prenom)
        SELECT @Matricule, @mot_de_passe, @Nom, @Prenom
        -- FROM ???
        WHERE NOT EXISTS (
              SELECT 1
              /*
              FROM users (
              WHERE Matricule = @Matricule AND
              */
              FROM users
              WHERE (
                          Matricule = @Matricule AND
                          mot_de_passe = @mot_de_passe AND
                          Nom = @Nom AND
                          Prenom = @Prenom
              )
        );
end//

DELIMITER ;

更新

我的版本,肯定行不通,但会帮你解决问题。

DELIMITER //

DROP PROCEDURE IF EXISTS `usp_testInsert`//

CREATE PROCEDURE `usp_testInsert` (
        `_Matricule` INT,
        `_mot_de_passe` VARCHAR(10),
        `_Nom` VARCHAR(10) ,
        `_Prenom` VARCHAR(10)
)
BEGIN
        INSERT INTO `users` (`Matricule`, `mot_de_passe`, `Nom`, `Prenom`)
        SELECT `_Matricule`, `_mot_de_passe`, `_Nom`, `_Prenom`
        FROM DUAL
        WHERE NOT EXISTS (
                SELECT 1
                FROM `users`
                WHERE (
                          `Matricule` = `_Matricule` AND
                          `mot_de_passe` = `_mot_de_passe` AND
                          `Nom` = `_Nom` AND
                          `Prenom` = `_Prenom`
                )
        );
END//

DELIMITER ;

【讨论】:

以上是关于PG数据库存储过程包含存储过程报语法错误,麻烦大神看看是啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL存储过程语法错误:if else

mybatis 调用存储过程

如何在mysql数据库中创建一个包含请求的存储过程

mysql创建函数或者存储过程,遇到语法报错

mysql创建函数或者存储过程,遇到语法报错

sqlserver 存储过程 使用事务,说明在下边,求大神指教!