|
|
|
execute sql string
|
|||
|---|---|---|---|
|
#18+
Доброе время суток как написать процедуру которое выполнеяло бы sql string типа того CREATE PROCEDURE myproc() returning int; DEFINE var_int ; DEFINE sql_str = 'select count(*) form table_name'; let var_int = exec(sql_str); // так не работает return var_int; end procedure; пасиба ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 12:04 |
|
||
|
execute sql string
|
|||
|---|---|---|---|
|
#18+
http://www.sql.ru/faq/faq_topic.aspx?fid=535 ----------------------------------------------------------- Решительный шаг вперед -- результат хорошего пинка сзади ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 12:14 |
|
||
|
execute sql string
|
|||
|---|---|---|---|
|
#18+
--------------------------------------- Using Dynamic Sql in Stored Procedure --------------------------------------- vpshriyan Location: Mumbai, India --------------------------------------- One of the major drawback of Informix Stored Procedure is it's inability to perform dynamic SQL. A SP is parsed & optimized when compiled, preventing the use of dynamic SQL. Here is an attempt to make a workaround stored procedure which attempts to insert a row for any table, any column dynamically. The inbound parameters are table name and dynamic number of column values. Sample SP considers max of 5 column values, but you can edit it to suit according to your need. Data once passed, committed. There no provision to rollback. Should something go wrong, the exception handler pushes an internal rollback mechanism, hence data will not be committed. In such cases SP returns non-zero value, implying failure. Please note that the invoked SYSTEM command creates a separate transaction of its own. The Informix SYSTEM statement provides the ability to execute any operating system command from within a stored procedure. A word of caution though, of the overhead required to execute an operating system command, the SYSTEM command should be avoided in routines with tight performance requirements. Use this procedure on your own cost and risk. create dba procedure dynamic_insert(xtabname varchar(18),x1 varchar(64),x2 varchar(64),x3 varchar(64),x4 varchar(64),x5 varchar(64)) returning smallint; define xowner, xdb varchar(18); define xcols, xcoltype, xtabid, i smallint; define xsql varchar(255); on exception --check for failure. raise exception -746, 0, xtabname||": insert failed."; return 1; end exception select owner,ncols,tabid into xowner,xcols,xtabid from systables where tabname=xtabname; if xowner is null or xowner[1,1]=" " then raise exception -746, 0, xtabname||" table does not exists."; return 1; end if let xsql="insert into "||xtabname||" values ("; for i=1 to xcols select coltype into xcoltype from syscolumns where tabid=xtabid and colno=i ; if ( xcoltype=0 or xcoltype=7 or xcoltype=10 or xcoltype=13 ) then if i=1 then let x1="'"||x1||"'" ; end if if i=2 then let x2="'"||x2||"'" ; end if if i=3 then let x3="'"||x3||"'" ; end if if i=4 then let x4="'"||x4||"'" ; end if if i=5 then let x5="'"||x5||"'" ; end if end if end for if xcols=1 then let xsql=xsql||x1 ; end if if xcols=2 then let xsql=xsql||x1||","||x2 ; end if if xcols=3 then let xsql=xsql||x1||","||x2||","||x3 ; end if if xcols=4 then let xsql=xsql||x1||","||x2||","||x3||","||x4 ; end if if xcols=5 then let xsql=xsql||x1||","||x2||","||x3||","||x4||","||x5; end if let xsql=xsql||")"; select trim(odb_dbname) into xdb from sysmaster:sysopendb where odb_sessionid=dbinfo('sessionid') and odb_iscurrent='Y'; system 'echo "begin;set lock mode to wait;'||xsql||';commit"'|| '|$INFORMIXDIR/bin/dbaccess '||xdb ; return 0; end procedure; Regards, Shriyan Last edited by vpshriyan on 12-09-03 at 07:52 ----- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 17:08 |
|
||
|
|

start [/forum/topic.php?fid=44&fpage=53&tid=1608762]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
22ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 317ms |

| 0 / 0 |
