nsmcp::DatabaseSession method execute (public)
<instance of nsmcp::DatabaseSession> execute sql [ arrayName ] \ [ script ]
Defined in /usr/local/ns/tcl/nsmcp/lib/database.tcl
- Parameters:
- sql (required)
- arrayName (optional)
- script (optional)
- Testcases:
- No testcase defined.
Source code: set rows {} foreach template [:compile $sql] { set statement {} foreach {type value} $template { if {$type eq "literal"} {append statement $value} elseif {[uplevel 1 [list info exists $value]]} { append statement [:quote [uplevel 1 [list set $value]]] } else {append statement NULL} } if {[string trim $statement] eq ""} continue set kind [ns_db exec ${:handle} $statement] set command [string toupper [lindex [split [string trim $statement]] 0]] if {$command eq "BEGIN"} {set :inTransaction true} if {$command in {COMMIT ROLLBACK END}} {set :inTransaction false} if {$kind ne "NS_ROWS"} continue set row [ns_db bindrow ${:handle}] try { while {[ns_db getrow ${:handle} $row]} { set record {}; set keys {} for {set i 0} {$i<[ns_set size $row]} {incr i} { set key [ns_set key $row $i] dict set record $key [ns_set value $row $i]; lappend keys $key } if {$arrayName eq ""} {lappend rows $record} else { upvar 1 $arrayName target array unset target dict for {key value} $record {set target($key) $value} set target(*) $keys set code [catch {uplevel 1 $script} value options] if {$code==3} break if {$code==4} continue if {$code} {return -options $options $value} } } } finally {ns_db flush ${:handle}; ns_set free $row} } return $rowsXQL Not present: Generic, PostgreSQL, Oracle
![[i]](/resources/acs-subsite/ZoomIn16.gif)