29 Mayıs 2009 Cuma

SQL : An INSERT EXEC statement cannot be nested.

vaeeeey okuyucular selam :=)
yine bir sorunla karşı karşıyayız,
malum MSSQL de uzun prosedürler yazarken, ayak işlerini başka prosedürlere yaptırmamız gerekebiliyor. Fakat , iç içe çağırdığınız prosedürlerde, eğer çağırdığınız prosedür başka bir prosedür çağırıyor ve bir #temp tabloya veri sokuyorsa ve sizin çağırdığınız prosedürde kendi içinde veri sokuyorsa, ve sizde son prosedürde bir temp tabloya veri sokuyorsanız (tamam biraz karışık oldu ).
An INSERT EXEC statement cannot be nested.

diye bir hata verecektir.
Çözümü de GLOBAL TEMP TABLE kullanmaktır,
Bazı sitelerden OPENROWSET gibi abidik gubidik, sorgu sırasında dahi SQL bağlantısı açan, uzun karışık yöntemler mevcuttur,
boşverin onları gülün geçin "hmm fevkalede" gibi yapmacık tepkiler verip uzaklaşın ordan :).

Nedir peki GLOBAL TEMP TABLE ;
Küreselleşen dünyada ki küreselleşmiş temp table yani;
efendim normalde tanımlarken #temp yazmıyor muyuz?
bunda sadece ##temp yazacağız, o kadar :=).
Yani arasında ki fark, rakıyı tek içmekle duble içmek arasında ki fark kadar.

Yani çağırdığımız prosedürlerden birinin sonucunu global temp tabloya atacağız ve son prosedürden çağırma işlemini ve arkasından drop işlemini yapacağız. Normalde temp tablolar prosedürle işiniz bitince otomatik droplanırken, bunda bağlantı kapanınca droplanıyor, siz her ihtimale karşı işiniz bitince drop edin :)


Örnek; (benim örneğim değil, kendimin ki baya uzun )

create proc test1
as

select orderid, customerid, employeeid from ##temp2

go
create proc test2
as
create table ##temp2 (orderid int ,
customerid char(5), employeeid int)

insert into ##temp2 exec test3
go

create proc test3
as
select top 100 orderid, customerid,
employeeid from orders
go

exec test2
exec test1

go
drop proc test1, test2, test3
drop table ##temp2
go

----

Son söz ;
Ainesi iştir prosedürün, koda bakılmaz.

2 Mayıs 2009 Cumartesi

ABAP : Smartform'da pencereyi son nesne olarka ayarlama


Merhabalar,
Smartform'da yaratılan bir pencerenin son nesne olarak gelmesi,
yani 5 sayfalık bir çıktıda 5. sayfanın sonunda gelmesi yada 1 sayfalık bir çıktıda, sayfanın sonunda gelmesi için yapmanız gereken, pencerenin koşullar sekmesinde 
"yalnızca ana pencerenin sonundan sonra" ve "yalnızca bölümün sonunda" seçeneğini tıklamaktır.
Vay efendim son nesne olarak çıktı ama 2 sayfalık çıktılarda ikisinde de çıktı sorunu veya
son nesne oldu ama sadece ilk sayfada çıktı sorunu yok artık ,
sonra vay ben duymadım vay ben görmedim demeyin.

Piyonları doğru yere koyun hadi iyi çalışmalar.