sysbench
sysbench copied to clipboard
how to call oracle’s procedure with sysbench0.5
how to use sysbench0.5 to call oracle’s procedure,i think so many methods,but always happen a mistakes OCIStmtExecute failed in drv_oracle.c:639 error-Ora-01722: invalid number
I use db_query([[CREATE OR REPLACE PROCEDURE sysbench.sbtest_pro]]..i.. [[(i in integer,k1 in integer,c1 in STRING,pad1 in STRING,kpad in STRING default 'a') as table_name varchar2(20); v_tablename varchar2(2000); BEGIN table_name:='sbtest'||i;v_tablename:='insert into '||table_name||'(k,c,pad) values(:1,:2,:3)';execute immediate v_tablename using k1,c1,pad1; COMMIT; END sbtest_pro]]..i..[[;]]) to create a oracle's procedure
touch a lua file,my code is: pathtest = string.match(test, "(.*/)") or ""
dofile(pathtest .. "common.lua")
function thread_init(thread_id) local procedure set_vars() procedure = "sbtest_pro".. sb_rand_uniform(1, oltp_tables_count) stmt = db_prepare([[call ]].. procedure ..[[(to_number(:0,'x'),to_number(:1,'xxxx'),:2,:3)]]) params = {} params[1] = '4' params[2] = '4444' params[3] = 'aaaaa' params[4] = 'bbbbb' db_bind_param(stmt, params) end
function event(thread_id) local c_val local pad_val local procedure c_val = sb_rand_str([[###########]]) pad_val = sb_rand_str([[###########]]) params[1] = string.gsub(string.format("%d",sb_rand(1, oltp_tables_count)),'[%s\t\n]','') params[2] = string.gsub(string.format("%d",sb_rand(1, oltp_table_size)),'[%s\t\n]','') params[3] = "Q'["..c_val.."]'" params[3] = string.gsub(params[3],'[%s\t\n]','') params[4] = "Q'["..pad_val.."]'" params[4] = string.gsub(params[4],'[%s\t\n]','') print(params[1],params[2],params[3],params[4]) print(tostring(stmt)) print(type(stmt)) db_execute(stmt) --db_query("COMMIT") end
but call proceduce happend a mistake: