| Richard Maher 2005-04-24, 3:55 am |
| Hi,
Didn't see the original post, but I was just looking at the following code
on an old floppy of mine as I was cleaning up my office after holidays.
FWIW
Cheers Richard Maher
PS. Obviously replace all the "#" with a space and sorry about the wrapping.
(After 20 odd years in I.T. I am simply incapable of stopping that from
happening. Or can't be arsed to find out how :-)
PPS. If you want to run multiple table scrambles in parralel then you'll
have to change the BATCH UPDATE transaction. But the performance is so
blisteringly fast I honestly wouldn't bother.
identification#division.
program-id.####dyn_test.
*
data#division.
working-storage#section.
01##rdb$_stream_eof#####################
pic#9(9)########comp####value###exte
rnal####rdb$_stream_eof.
01##lib$_strtru#########################
pic#9(9)########comp####value###exte
rnal####lib$_strtru.
01##ss$_abort###########################
pic#9(9)########comp####value###exte
rnal####ss$_abort.
01##ss$_normal##########################
pic#9(9)########comp####value###exte
rnal####ss$_normal.
01##sys_status##########################
pic#9(9)########comp.
*
01##sqlcode#############################
pic#9(9)########comp.
01##rdb$message_vector##################
########################external.
####03#rdb$lu_num_arguments#############
pic#9(9)########comp.
####03#rdb$lu_status####################
pic#9(9)########comp.
####03#rdb$alu_arguments################
################occurs#18#times.
########05#rdb$lu_arguments#############
pic#9(9)########comp.
*
01##col_name############################
pic#x(39).
01##col_count###########################
pic#9(9)########comp.
*
01##cmd_string##########################
pic#x(10000).
*
01##set_trans_statement.
####03##################################
pic#x(39)###############value###"set
#transaction#batch#update#reserving".
####03##trans_table#####################
pic#x(39).
####03##################################
pic#x(21)###############value###"#fo
r#exclusive#write;".
*
01##select_statement.
####03##################################
pic#x(7)################value###"sel
ect".
####03##select_list.
######04##select_array##################
################occurs##256#times.
########05##select_col##################
pic#x(30).
########05##select_delim################
pic#x(1).
####03##################################
pic#x(5)################value###"fro
m".
####03##select_table####################
pic#x(39).
####03##################################
pic#x(1)################value###";".
*
01##update_id###########################
pic#9(9)########comp.
01##update_statement.
####03##################################
pic#x(7)################value###"upd
ate".
####03##update_table####################
pic#x(39).
####03##################################
pic#x(5)################value###"#se
t".
####03##update_list.
######04##update_array##################
################occurs##256#times.
########05##update_col##################
pic#x(30).
########05##update_delim################
pic#x(5).
####03##################################
pic#x(22)###############value###"#wh
ere#current#of#sel;".
*
01##col_prefix_table.
####03##col_elem########################
################occurs##256#times.
########05##col_prefix##################
pic#x(39).
########05##col_prefix_len##############
pic#9(4)########comp.
*
01##col_pfx#############################
pic#x(39).
*
01##sqlda_char##########################
pic#9(4)########comp####value###453.
01##sqlda_integer#######################
pic#9(4)########comp####value###497.
01##sqlda_quadword######################
pic#9(4)########comp####value###505.
*
01##sqlda_list.
####03##sqldaid#########################
pic#x(8)################value###"SQL
DA".
####03##sqldabc#########################
pic#9(9)########comp.
####03##sqln############################
pic#9(4)########comp####value###256.
####03##sqld############################
pic#9(4)########comp.
####03##sqlname_rec#####################
################occurs##0#to####256#
########################################
################depending#on#sqln#of
#sqlda_list.
########05##sqltype#####################
pic#9(4)########comp.
########05##sqllen######################
pic#9(4)########comp.
########05##sqldata#####################
################pointer.
########05##sqlind######################
################pointer.
########05##sqlname.
############07##name_len################
pic#9(4)########comp.
############07##name_str################
pic#x(30).
*
01##sqlda_update.
####03##sqldaid#########################
pic#x(8)################value###"SQL
DA".
####03##sqldabc#########################
pic#9(9)########comp.
####03##sqln############################
pic#9(4)########comp####value###256.
####03##sqld############################
pic#9(4)########comp.
####03##sqlname_rec#####################
################occurs##0#to####256#
########################################
################depending#on#sqln#of
#sqlda_update.
########05##sqltype#####################
pic#9(4)########comp.
########05##sqllen######################
pic#9(4)########comp.
########05##sqldata#####################
################pointer.
########05##sqlind######################
################pointer.
########05##sqlname.
############07##name_len################
pic#9(4)########comp.
############07##name_str################
pic#x(30).
*
01##col_desc.
####03##col_len#########################
pic#9(9)########comp.
####03##col_addr########################
################pointer.
*
01##scramble_eof########################
pic#x(1).
01##unique_char#########################
pic#x(65535).
01##unique_integer######################
pic#s9(9)#######comp.
01##unique_quadword#####################
pic#s9(18)######comp.
01##scramble_field######################
pic#x(65535).
01##scramble_desc.
####03##scramble_desc_len###############
pic#9(9)########comp.
####03##################################
################pointer#value###refe
rence#scramble_field.
*
01##unique_id_string####################
pic#x(65535).
01##unique_id_integer###################
################redefines
####unique_id_string####################
pic#-9(9).
01##unique_id_quadword##################
################redefines
####unique_id_string####################
pic#-9(18).
01##unique_id_len#######################
pic#9(4)########comp.
*
01##null_indicators.
####03##null_ind########################
pic#s9(4)#######comp
########################################
################occurs##256#times.
*
01##task_id#############################
pic#x(39)###############value###"TES
T_TABLE".
01##relation_prefix#####################
pic#x(39).
01##relation_prefix_len#################
pic#9(4)########comp.
01##unique_id###########################
pic#x(39).
01##vm_bytes############################
pic#9(9)########comp.
*
procedure#division.
kick_off#section.
00.
####perform#get_setup.
####move#set_trans_statement#to#cmd_stri
ng.
####call#"sql_execute_immediate"#using#sqlcode,#cmd_string.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####call#"sql_prepare_select"
########using###sqlcode,
################select_statement.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####call#"sql_describe_select"
########using###sqlcode,
################sqlda_list.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####display#"Number#of#columns#in#select#list#is#",#sqld#of#sqlda_list#with#
conversion.
####perform#varying#sqln#of#sqlda_list#f
rom#1#by#1#until#sqln#of#sqlda_list#
=#sqld#of#sqlda_list
########if#sqltype#of#sqlda_list#(sqln#o
f#sqlda_list)#not#=#sqlda_char
############display#"Can#only#handle#CHAR#datatypes#",#sqltype#of#sqlda_list
#(sqln#of#sqlda_list)#with#conversion
############call#"lib$stop"#using#by#value#ss$_abort
########end-if
########move#sqllen#of#sqlda_list#(sqln#
of#sqlda_list)#to#vm_bytes
########call#"lib$get_vm" #using#vm_bytes,#sqldata#of#sqlda_list#(
sqln#of#sql
da_list)#giving#sys_status
########if#sys_status#not#=#ss$_normal#
############call#"lib$stop"#using#by#value#sys_status
########end-if
########set#sqlind#of#sqlda_list(sqln#of
#sqlda_list)#to#reference#null_ind(s
qln#of#sqlda_list)
####end-perform.
####evaluate####sqltype#of#sqlda_list(sq
ln#of#sqlda_list)
########when####sqlda_char######set#sqld
ata#of#sqlda_list(sqln#of#sqlda_list
)#to#reference#unique_char
########when####sqlda_integer###set#sqld
ata#of#sqlda_list(sqln#of#sqlda_list
)#to#reference#unique_integer
########when####sqlda_quadword##set#sqld
ata#of#sqlda_list(sqln#of#sqlda_list
)#to#reference#unique_quadword
########when####other###########call#"lib$stop"#using#by#value#sys_status
####end-evaluate.
####move#sqlda_list#to#sqlda_update.
####subtract#1#from#####sqln#of#sqlda_up
date,
########################sqld#of#sqlda_up
date.
####call#"sql_prepare_update"
########using###sqlcode,
################update_id,
################update_statement.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####call#"sql_open_sel"#using#sqlcode.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####move#"N"#to#scramble_eof
####call#"sql_fetch_sel"#using#sqlcode,#sqlda_list.
####evaluate####rdb$lu_status
########when####rdb$_stream_eof#move#"Y"#to#scramble_eof
########when####ss$_normal######continue
########when####other###########call#"sys$putmsg"#using#rdb$message_vector#g
iving#sys_status
################################call#"lib$stop"#using#by#value#ss$_abort
####end-evaluate.
####perform#scramble_data#until#scramble
_eof#=#"Y".
####call#"sql_close_sel"#using#sqlcode.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####call#"sql_commit_db"#using#sqlcode.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
*
*
fini.
####stop#run.
*
get_setup#section.
00.
####call#"sql_task_tran"#using#sqlcode.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####move#task_id#to#####trans_table,
########################select_table,
########################update_table.
####call#"sql_get_scramble"
########using###sqlcode,
################relation_prefix,
################unique_id,
################task_id.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####call#"str$trim"
########using###by#descriptor###relation
_prefix,#relation_prefix
################by#reference####relation
_prefix_len
########giving##sys_status.
####if#sys_status#not#=#ss$_normal#call#
"lib$stop"#using#by#value#sys_status
..
####call#"sql_open_enigma"#
########using###sqlcode,
################task_id.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####move#spaces#to######select_list,
########################update_list.
####move#zeros#to#col_count.
####call#"sql_fetch_enigma"
########using###sqlcode,
################col_name,
################col_pfx.
####perform#until#rdb$lu_status#not#=#ss
$_normal
########add#1#to#col_count
########move#col_pfx##to########col_pref
ix(col_count)
########move#col_name#to########select_c
ol(col_count)
################################update_c
ol(col_count)
########call#"str$trim"
############using##by#descriptor#col_pre
fix(col_count),#col_prefix(col_count
)
###################by#reference##col_pre
fix_len(col_count)
############giving#sys_status
########if#sys_status#not#=#ss$_normal#
############call#"lib$stop"#using#by#value#sys_status
########end-if
########move#","#to#select_delim(col_count)
########move#"#=#?,"#to#update_delim(col_count)
########call#"sql_fetch_enigma"
############using#######sqlcode,
########################col_name,
########################col_pfx
####end-perform.
####if#rdb$lu_status#not#=#rdb$_stream_e
of
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####if#col_count#=#zeros
########display#"No#columns#to#update#for#",#task_id
########call#"lib$stop"#using#by#value#ss$_abort.
####move#space#to#update_delim(col_count
)(5:1).
####add#1#to#col_count.
####move#unique_id#to#select_col(col_cou
nt).
####call#"sql_close_enigma"#using#sqlcode.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
####call#"sql_commit_db"#using#sqlcode.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
*
scramble_data#section.
00.
####move#spaces#to#unique_id_string.
####evaluate####sqltype#of#sqlda_list(sq
ln#of#sqlda_list)
########when####sqlda_char######call#"str$trim"
####################################usin
g#######by#descriptor###unique_char,
#unique_id_string
########################################
########by#reference####unique_id_le
n
####################################givi
ng######sys_status
################################if#sys_s
tatus#not#=#ss$_normal#
####################################call
#"lib$stop"#using#by#value#sys_statu
s
################################end-if
########when####sqlda_integer###move#uni
que_integer#to#unique_id_integer
################################move#10#
to#unique_id_len
########when####sqlda_quadword##move#uni
que_quadword#to#unique_id_quadword
################################move#19#
to#unique_id_len
####end-evaluate.
####perform#varying#sqln#of#sqlda_update
#from#1#by#1#until#sqln#of#sqlda_upd
ate#>#sqld#of#sqlda_update
########move#spaces#to#scramble_field
########string##relation_prefix(1:relati
on_prefix_len),
################col_prefix(sqln#of#sqlda
_update)(1:col_prefix_len(sqln#of#sq
lda_update)),
################unique_id_string(1:uniqu
e_id_len)
################delimited#by#size
########into####scramble_field
########add#####relation_prefix_len,
################col_prefix_len(sqln#of#s
qlda_update),
################unique_id_len
########giving##scramble_desc_len
########move#sqllen##of#sqlda_update#(sq
ln#of#sqlda_update)#to#col_len
########move#sqldata#of#sqlda_update#(sq
ln#of#sqlda_update)#to#col_addr
########call#"lib$scopy_dxdx" #using#scramble_desc,#col_desc#giving#sy
s_statu
s
########if#sys_status#not#=#ss$_normal#a
nd#lib$_strtru
############call#"lib$stop"#using#by#value#sys_status
########end-if
####end-perform.
####move#sqld#of#sqlda_update#to#sqln#of
#sqlda_update.
####call#"sql_execute_stmt"
########using###sqlcode,
################sqlda_update,
################update_id.
####if#rdb$lu_status#not#=#ss$_normal
########call#"sys$putmsg" #using#rdb$message_vector#giving#sys_sta
tus
########call#"lib$stop"#using#by#value#ss$_abort.
*
fini.
####call#"sql_fetch_sel"#using#sqlcode,#sqlda_list.
####evaluate####rdb$lu_status
########when####rdb$_stream_eof#move#"Y"#to#scramble_eof
########when####ss$_normal######continue
########when####other###########call#"sys$putmsg"#using#rdb$message_vector#g
iving#sys_status
################################call#"lib$stop"#using#by#value#ss$_abort
####end-evaluate.
*
end#program#dyn_test.
module####dyn_sql
language##cobol
authorization#scram_db
parameter#colons
declare#external#scram_db#alias#filename
#scram_db
declare#sel#cursor#for#sel_stmt
declare#enigma#cursor#for
########select#
################a.field_name,
################a.field_prefix
########from
################scramble_relation_fields
#a
########where
################a.relation_name#=#:task_id
procedure#sql_task_tran
########sqlcode
########;
########set#transaction#read#write#reser
ving
################scramble_relation#######
########for#shared#write,
################scramble_relation_fields
########for#shared#read;
procedure#sql_get_scramble
########sqlcode,
########:relation_prefix########char(39)
,
########:unique_id##############char(39)
,
########:task_id################char(39)
########;
########select
################a.relation_prefix,
################a.unique_id
########into
################:relation_prefix,
################:unique_id
########from#
################scramble_relation#a
########where
################a.relation_name#=#:task_id
########;
procedure#sql_open_enigma
########sqlcode,
########:task_id################char(39)
########;
########open#enigma;
procedure#sql_fetch_enigma
########sqlcode,
########:field_name#############char(39)
,
########:field_prefix###########char(39)
########;
########fetch
################enigma
########into
################:field_name,
################:field_prefix
########;
procedure#sql_close_enigma
########sqlcode
########;
########close#enigma;
procedure#sql_prepare_select
########sqlcode,
########:stmt###################char(798
8)
########;
########prepare#sel_stmt#from#:stmt;
procedure#sql_describe_select
########sqlca,
########sqlda;
########describe#sel_stmt#select#list#in
to#sqlda;
procedure#sql_open_sel
########sqlca;
########open#sel;
procedure#sql_fetch_sel
########sqlca,
########sqlda;
########fetch#sel#using#descriptor#sqlda
;
procedure#sql_close_sel
########sqlca;
########close#sel;
procedure#sql_release_stmt
########sqlca;
########release#sel_stmt;#
procedure#sql_prepare_update
########sqlcode,
########:update_id##############integer,
########:stmt###################char(903
3)
########;
########prepare#:update_id#from#:stmt;
procedure#sql_execute_stmt
########sqlcode,
########:sqlda##################sqlda,
########:dyn_stmt_id############integer
########;
########execute#:dyn_stmt_id#using#descr
iptor#:sqlda;
procedure#sql_commit_db
########sqlcode;
########commit;
procedure#sql_execute_immediate
########sqlcode,
########:cmd_string#############char(100
00)
########;
########execute#immediate#:cmd_string;
"William M. Klein" <wmklein@nospam.netcom.com> wrote in message
news:aqV8e.317613$za2.50898@news.easynews.com...
> the E-level message says that "WS-SQL" is not of "type" VARCHAR.
>
> See:
>
http://publibz.boulder.ibm.com/cgi-...snaph13/2.4.3.7
>
> for how to define a VARCHAR host variable (in COBOL - at least for IBM
> mainframes and DB2), e.g.
>
> 01 VAR-NAME.
> 49 VAR-LEN PIC S9(4) USAGE BINARY.
> 49 VAR-TEXT PIC X(n).
>
> Use of level "49" is required (as I recall) and you MUST have a binary
field
> followed by the actual "data" portion.
>
> --
> Bill Klein
> wmklein <at> ix.netcom.com
> "kathie" <kktbva@yahoo.com> wrote in message
> news:1113852104.333988.160920@f14g2000cwb.googlegroups.com...
>
>
|