|
Тема
|
PostgreSQL - как да execute-на произволен script??
|
|
Автор |
VladoVasilev (минаващ) |
Публикувано | 03.04.06 17:30 |
|
Питанката е следната : Има ли възможност синтаксиса на Postgre SQL да execut-на произволен скрипт? Идеята ми е скрипта да е параметър на дадена функция и вътре да се изпълнява. Това може да се направи, ако предварително скрипта бъде записан във файл, доколкото прочетох (exec script) или в самото приложение, което се връзва към базата (например аз пиша на Делфи и мога от там да го контролирам). Въпроса е дали мога да правя това и в самата база?
Мерси на отзивчивите :)
| |
|
Още малко въпроси, макар че липсват отогвори :(. 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
по-добре кажи по-конкретно какво мислиш да правиш защото тва определено доста рядко има смисъл
| |
|
Искам да направя функция с параметри, която да създава нова таблица в базата, на този етап структурата ще е константа, само името на новата таблица е параметър. Ето какво успях да направя:
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
| |
|
Първо, замени двойните кавички с единични и второ, разкарай това commit work и си готов.
Everything louder than everything else...
| |
|
проблемът ти е в кавички! :-)
в 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 |
|
хе аз нещо съм се разсеял и не съм видял твоя отговор :-)
| |
|
|
|
|