Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 11:53 14.07.25 
Компютри и Интернет
   >> Бази данни
*Кратък преглед

Тема Firebird процедура SELECT * ...нови  
АвторMaнoл4o (Нерегистриран)
Публикувано09.05.06 08:59



Здравейте
Има ли начин да се направи процедура във Firebird която прави SELECT * FROM tableName, а не да се изброяват колоните от таблицата.

Благодаря



Тема Re: Firebird процедура SELECT * ...нови [re: Maнoл4o]  
Автор NickBass (бас-програмист)
Публикувано09.05.06 09:32



В PSQL, select заявката задължава използването на INTO:

for select
invoce_no, invoice_date
from
invoices
where
cust_id = :cust_id
into
:inv_no, :inv_date
do
suspend;

Ако PSQL допускаше * и ти връщаше колоните по реда на позицията в таблицата, помисли какво ще се получи при промяна на позициите на колоните в таблицата.





Тема Re: Firebird процедура SELECT * ...нови [re: NickBass]  
АвторMaнoл4o (Нерегистриран)
Публикувано09.05.06 09:54



Ами в MSSQL и MySQL е допустимо използването на SELECT *.
Не разбирам защо това е проблем тук. А и кои ще тръгне да размества колоните еи така.
А всъщност SELECT * FROM tableName си работи нормално когато не е в процедура.

Би ли дал малко пояснения?
Благодаря



Тема Re: Firebird процедура SELECT * ...нови [re: Maнoл4o]  
Автор NickBass (бас-програмист)
Публикувано09.05.06 12:09



Не мога да кажа как стоят нещата в MySQL и MSSQL. Мога само да предполагам, че ако позволяват SELECT * FROM ... в сторната процедура, то тогава самата процедура трябва да позволява връщане на променлив брой колони например.
Иначе опасността от грешката в примера, който ти дадох е реална. Да се разместят местата на колоните въобще не е рядкост, особено ако дадена БД се поддържа от повече девелопери. Прост пример е с отпадането на данъчния номер. Понеже не е необходим вече, някой може да го дропне като колона или просто да го премести най-отдолу хем да не му се пречка, хем да не го трие от всички заявки където фигурира... Нали се сещаш...
---------------------
А всъщност SELECT * FROM tableName си работи нормално когато не е в процедура.
---------------------
Да работи, защото има разлика в синтаксиса и предназначението на PSQL (Procedure SQL) и ISQL. Твоят пример е ISQL заявка, която приложението ти изпраща към сървъра, докато при процедурите и тригерите важат правилата на PSQL. При Firebird концепцията е такава, че PSQL не позволява * в SELECT заявка. Така са решили хората и аз лично съм съгласен с тях, защото дори и да ми позволяваше, аз пак не бих използвал * заради случки като горната.



Тема Re: Firebird процедура SELECT * ... [re: NickBass]  
АвторMaнoл4o (Нерегистриран)
Публикувано09.05.06 12:32



Да съгласен съм с теб и благодаря за изчерпателния отговор.
Моя проблем би се решил и ако има начин връшания резултат от процедурата да не е определен брои колони. Това ми е нужно понеже искам процедурата да прави SELECT от няколко таблици които и се предават като аргументи.
Пак трябва да дам пример с MSSQL. Там процедурата също си има output параметри но връща и recordset които се е получил от SELECT заявката вътре.
Тук може ли да се направи нещо подобно?



Тема Re: Firebird процедура SELECT * ...нови [re: Maнoл4o]  
Автор NickBass (бас-програмист)
Публикувано09.05.06 15:37



За съжаление при Firebird (до 1.5.3) няма параметри от тип recordset. Можеш обаче да подадеш имената на таблиците като input параметри и да използваш
EXECUTE STATEMENT в процедурата. Ама..... защо ми се струва, че в твоя случай няма смисъл от сторната процедура. Защо не си генерираш заявката от самата програма? Е.... сигурно има защо, ама така може да си спестиш мъките.




*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.