SQL Developer'da SQL Server Depolanan Prosedürü Nasıl Yürütülür?


151

Yalnızca saklı bir yordamı yürütme ayrıcalıklarına sahip bir SQL Server veritabanına bir kullanıcı hesabı verildi. JTDS SQL Server JDBC jar dosyasını SQL Developer'a ekledim ve Üçüncü Taraf JDBC sürücüsü olarak ekledim. SQL Server veritabanına başarıyla giriş yapabiliyorum. Prosedürü çalıştırmam için bana bu sözdizimi verildi:

EXEC proc_name 'paramValue1' 'paramValue2'

Bunu bir ifade veya komut dosyası olarak çalıştırdığımda şu hatayı alıyorum:

Error starting at line 1 in command:
EXEC proc_name 'paramValue1' 'paramValue2'
Error report:
Incorrect syntax near the keyword 'BEGIN'.

İfadeyi içine BEGIN/ENDalmayı denedim , ancak aynı hatayı alıyorum. Prosedürü SQL Developer'dan çağırmak mümkün mü? Öyleyse, hangi sözdizimini kullanmam gerekiyor?

Yanıtlar:


237

EXEC maddesine ihtiyacınız yok. Basitçe kullan

proc_name paramValue1, paramValue2

(ve Misnomer'ın bahsettiği gibi virgüllere ihtiyacınız var)


9
Bu kuralın herhangi bir istisnası var mı? "'Sp_dev_mystoredproc' yakınında yanlış sözdizimi" hatası alıyorum. bu sözdizimi ile çalıştırılırken.
nuzzolilo

2
Benim durumumda EXEC öncesi proc_name gerekli
César León

73

Sen özlüyorsun ,

EXEC proc_name 'paramValue1','paramValue2'

1
Eksik virgül ekledim, ancak yine de aynı hatayı alıyorum.
sdoca

Parametreleriniz varchar ise, o zaman sadece tekliflere ihtiyacınız var ... bunun dışında hiçbir şey düşünemezsiniz ... bunu deneyebilirsiniz, sadece bunu yeni bir pencerede çalıştırın EXEC proc_nameve bakalım ikinci parametre ... o zaman en azından sytax'inizin doğru olduğunu biliyorsunuzdur ... eğer çalışmazsa, muhtemelen doğru kaydedilmiş proc ismine sahip olmadığınız anlamına gelir ... tam nitelikli ismi deneyin ..
Vishal

İkinci parametreyi kaldırdım ve hala aynı hatayı. Prosedür olduğunu sanmıyorum. EXEC komutu sözdizimi vurgulanmamış, bu yüzden Geliştirici'nin bağlantı bir SQL Server veritabanına olmasına rağmen bunu tanımadığını tahmin ediyorum. Ancak web'de bunu onaylayacak / reddedecek hiçbir şey bulamıyorum.
sdoca

Evet..bazı kayıtları seçmeyi ve bazı basit komutları çalıştırmayı deneyin, bakalım bir şey işe yarıyor mu! .. Bol şans ..
Vishal

Ne yazık ki, kullanıcımın yalnızca saklı yordamı çalıştırma ayrıcalıkları var.
sdoca

19

Bunu yapmanız gerekiyor:

    exec procName 
    @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'

4
    EXECUTE [or EXEC] procedure_name
  @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'

0
EXEC proc_name @paramValue1 = 0, @paramValue2 = 'some text';
GO

Depolanan Prosedürün amacı, INSERTbir Kimlik alanı tanımlanmış bir tablo üzerinde gerçekleştirmekse , bu senaryodaki alan @paramValue1bildirilmeli ve sadece 0 değerini geçmelidir, çünkü otomatik artış olacaktır.


0

Bunun eski olduğunu biliyorum. Ancak bu başkalarına yardımcı olabilir.

BEGIN / END arasında SP arama işlevi ekledim. İşte çalışan bir komut dosyası.

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 

-3

Depolanan yordamınızı proc_name 'paramValue1' , 'paramValue2'... aynı anda çalıştırmanız gerekiyorsa, tek bir seçme sorgusu ve saklı yordam gibi birden fazla sorgu çalıştırıyorsanız, eklemeniz gerekir select * from tableName EXEC proc_name paramValue1 , paramValue2...


-8

Depolanan prosedürler aşağıdaki sözdizimi kullanılarak sql geliştirici aracında çalıştırılabilir.

BEGIN prosedurename (); SON;

Herhangi bir parametre varsa, geçilmesi gerekir.


Neden tek bir ifadeyi bir ifade bloğunun içine alıyorsunuz? Bunu yalnızca bir dizi T-SQL ifadesi için yapmanız gerekir .
David Ferenczy Rogožan

-11
Select * from Table name ..i.e(are you save table name in sql(TEST) k.

Select * from TEST then you will execute your project.

1
Stackoverflow'a hoş geldiniz. Bu sitenin nasıl çalıştığını ve ne işe yaradığını öğrenmek için bu tura katılın . Cevabın ne
Devraj Gadhavi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.