Un compte utilisateur m'a été attribué à une base de données SQL Server qui ne dispose que de privilèges pour exécuter une procédure stockée. J'ai ajouté le fichier jar JDBC JTDS SQL Server à SQL Developer et l'a ajouté en tant que pilote JDBC tiers. Je peux réussir à me connecter à la base de données SQL Server. On m'a donné cette syntaxe pour exécuter la procédure:
EXEC proc_name 'paramValue1' 'paramValue2'
Lorsque j'exécute ceci en tant qu'instruction ou script, j'obtiens cette erreur:
Error starting at line 1 in command:
EXEC proc_name 'paramValue1' 'paramValue2'
Error report:
Incorrect syntax near the keyword 'BEGIN'.
J'ai essayé d'encapsuler la déclaration dans BEGIN/END
, mais j'obtiens la même erreur. Est-il possible d'appeler la procédure depuis SQL Developer? Si oui, quelle syntaxe dois-je utiliser?
Vous n'avez pas besoin de la clause EXEC. Simplement utiliser
proc_name paramValue1, paramValue2
(et vous avez besoin de virgules comme Misnomer mentionné)
Il vous manque ,
EXEC proc_name 'paramValue1','paramValue2'
Vous devez faire ceci:
exec procName
@parameter_1_Name = 'parameter_1_Value',
@parameter_2_name = 'parameter_2_value',
@parameter_z_name = 'parameter_z_value'
EXECUTE [or EXEC] procedure_name
@parameter_1_Name = 'parameter_1_Value',
@parameter_2_name = 'parameter_2_value',
@parameter_z_name = 'parameter_z_value'
EXEC proc_name @paramValue1 = 0, @paramValue2 = 'some text';
GO
Si l'objectif de la procédure stockée consiste à exécuter une INSERT
sur une table ayant un champ Identity déclaré, le champ, dans ce scénario @paramValue1
, doit être déclaré et ne transmettre que la valeur 0, car il sera incrémenté automatiquement.
Je sais que c'est l'ancien. Mais cela peut aider les autres.
J'ai ajouté la fonction d'appel SP entre BEGIN/END. Voici un script de travail.
ALTER Proc [dbo].[DepartmentAddOrEdit]
@Id int,
@Code varchar(100),
@Name varchar(100),
@IsActive bit ,
@LocationId int,
@CreatedBy int,
@UpdatedBy int
AS
IF(@Id = 0)
BEGIN
INSERT INTO Department (Code,Name,IsActive,LocationId,CreatedBy,UpdatedBy,CreatedAt)
VALUES(@Code,@Name,@IsActive,@LocationId,@CreatedBy,@UpdatedBy,CURRENT_TIMESTAMP)
EXEC dbo.LogAdd @CreatedBy,'DEPARTMENT',@Name
END
ELSE
UPDATE Department SET
Code = @Code,
Name = @Name,
IsActive = @IsActive,
LocationId = @LocationId,
CreatedBy = @CreatedBy,
UpdatedBy = @UpdatedBy,
UpdatedAt = CURRENT_TIMESTAMP
where Id = @Id