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

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

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

Тема PostgreSQL - как да execute-на произволен script??нови  
Автор VladoVasilev (минаващ)
Публикувано03.04.06 17:30



Питанката е следната : Има ли възможност синтаксиса на Postgre SQL да execut-на произволен скрипт? Идеята ми е скрипта да е параметър на дадена функция и вътре да се изпълнява. Това може да се направи, ако предварително скрипта бъде записан във файл, доколкото прочетох (exec script) или в самото приложение, което се връзва към базата (например аз пиша на Делфи и мога от там да го контролирам). Въпроса е дали мога да правя това и в самата база?
Мерси на отзивчивите :)



Тема Re: PostgreSQL - как да execute-на произволен script??нови [re: VladoVasilev]  
Автор VladoVasilev (минаващ)
Публикувано04.04.06 12:29



Още малко въпроси, макар че липсват отогвори :(. Execute immediate - как действа този sattement, може би това е нешото, което ми трябва, но не мога са го подкарам. Като интерфейс използвам pgAdmin III, съответно тествам всичко там. Пробвах да направя ф-ция и вътре да викам "execute immediately $1...", но нещо не мога да уцеля синатксиса. Или не е това идеята? Някой може ли да разясни - същия statement се поддържа и в Oracle 8.
Мерси...



Тема Re: PostgreSQL - как да execute-на произволен scriнови [re: VladoVasilev]  
Автор phpGuruАдминистратор (ентусиаст)
Публикувано04.04.06 17:11



за да стартираш нещо външно няма да можеш да го направиш с plpgsql

ще ти трябва някакъв друг език plperl/plpython/plphp/pltcl и по-специално untrusted версиите или C/C++ (вероятно и на делфи може, ама нямам идеа как става)

и от функцията в зависимост от това какъв език си си избрал по различен начин се извиква външната команда



Тема Re: PostgreSQL - как да execute-на произволен scriнови [re: phpGuru]  
Автор VladoVasilev (минаващ)
Публикувано05.04.06 16:06



Това postgres сега го азучавам и определено ъсм повече от начинаещ. Дай пример - конкретен език и синтаксис, ако може :)



Тема Re: PostgreSQL - как да execute-на произволен scri [re: VladoVasilev]  
Автор phpGuruАдминистратор (ентусиаст)
Публикувано05.04.06 23:03



aми първо какво точно искаш да стартираш и сигурен ли си, че искаш! :-))
___________________________
ceco@base:~$ createlang plperlu test
ceco@base:~$ psql test
Welcome to psql 8.0.3, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

test=# CREATE OR REPLACE FUNCTION run() RETURNS text AS $$
test$# return `ls /`;
test$# $$ LANGUAGE plperlu;
CREATE FUNCTION
test=# select run();
run
---------
backups
bin
boot
cdrom
dev
etc
home
initrd
initrd.img
lib
lost+found
media
mnt
opt
proc
root
sbin
srv
sys
tmp
usr
var
vmlinuz

(1 row)

test=#

___________________________

това показва на моя компютър ползвайки plperlu

по-добре кажи по-конкретно какво мислиш да правиш защото тва определено доста рядко има смисъл



Тема Малък напредъкнови [re: phpGuru]  
Автор VladoVasilev (минаващ)
Публикувано12.04.06 14:28



Искам да направя функция с параметри, която да създава нова таблица в базата, на този етап структурата ще е константа, само името на новата таблица е параметър. Ето какво успях да направя:

CREATE OR REPLACE FUNCTION CreateTable(tblname "varchar")
RETURNS void AS
$BODY$
declare var_script varchar(1000);
begin
var_script := "create table " || $1 || "(id int8)";
execute var_script;
commit work;
end;$BODY$
LANGUAGE 'plpgsql' VOLATILE;

И вече имам новата функция! После обаче опитах да изпълня [SELECT CREATETABLE("Table!")] и ми даде грешка:
---

ERROR: column "create table " does not exist
CONTEXT: SQL statement "SELECT "create table " || $1 || "(id int8)""
PL/pgSQL function "createtable" line 3 at assignment



Тема Re: Малък напредъкнови [re: VladoVasilev]  
Автор Dakota (erotoman)
Публикувано13.04.06 14:31



Първо, замени двойните кавички с единични и второ, разкарай това commit work и си готов.

Everything louder than everything else...


Тема Re: Малък напредъкнови [re: VladoVasilev]  
Автор phpGuruАдминистратор (ентусиаст)
Публикувано13.04.06 14:47



проблемът ти е в кавички! :-)

в PG " се използва за ограждане на имана на полета/таблици и т.н.

текстови низове (strings) се ограждат в апострофи '

за да ти работи функцията пробвай така

CREATE OR REPLACE FUNCTION CreateTable(tblname varchar)
RETURNS void AS
$BODY$
declare var_script varchar(1000);
begin
var_script := 'create table ' || $1 || '(id int8)';
execute var_script;
end;$BODY$
LANGUAGE 'plpgsql' VOLATILE;

махнал съм и това commit work, тук би ти дало само грешкка :-)



Тема Re: Малък напредъкнови [re: Dakota]  
Автор phpGuruАдминистратор (ентусиаст)
Публикувано13.04.06 14:49



хе аз нещо съм се разсеял и не съм видял твоя отговор :-)




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


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

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