I have a COBOL program and I want to use it with table A or table B, as both have the same structure and similar data, but I don't want to repeat every SQL stmt for both.. Instead of the next two selects, for example, I would like to use one select stmt with the tablename a variable.:
2000-get-record section.
EXEC SQL
Select * from A
where x = z
END-EXEC.
OR
2100-get-record section.
EXEC SQL
Select * from B
where x = z
END-EXEC.
.
One solution could be to define the SQL statements within a copy file.
Copy file ‘SQLVarTabName.cpy’:
EXEC SQL
select * from TabName
where x = z
END-EXEC
Cobol source:
If recNumber = 2000
copy SQLVarTabName replacing TabName by ==A==.
end-if
If recNumber = 2100
copy SQLVarTabName replacing TabName by ==B==.
end-if
Freundliche Grüsse
Werner Lanter
I have a COBOL program and I want to use it with table A or table B, as both have the same structure and similar data, but I don't want to repeat every SQL stmt for both.. Instead of the next two selects, for example, I would like to use one select stmt with the tablename a variable.:
2000-get-record section.
EXEC SQL
Select * from A
where x = z
END-EXEC.
OR
2100-get-record section.
EXEC SQL
Select * from B
where x = z
END-EXEC.
.
Or you could use Dynamic SQL where instead of hardcoding the statement within EXEC SQL you instead place the content within a variable and then use PREPARE and EXECUTE to run the statement.
You can find a video that covers the topic of Dynamic SQL here although this covers OpenESQL and I believe you use Pro*COBOL. You should look at the Oracle docs for this if that is the case.
I have a COBOL program and I want to use it with table A or table B, as both have the same structure and similar data, but I don't want to repeat every SQL stmt for both.. Instead of the next two selects, for example, I would like to use one select stmt with the tablename a variable.:
2000-get-record section.
EXEC SQL
Select * from A
where x = z
END-EXEC.
OR
2100-get-record section.
EXEC SQL
Select * from B
where x = z
END-EXEC.
.
Can it also be used to do updates? I am finding that trickier...
I have a COBOL program and I want to use it with table A or table B, as both have the same structure and similar data, but I don't want to repeat every SQL stmt for both.. Instead of the next two selects, for example, I would like to use one select stmt with the tablename a variable.:
2000-get-record section.
EXEC SQL
Select * from A
where x = z
END-EXEC.
OR
2100-get-record section.
EXEC SQL
Select * from B
where x = z
END-EXEC.
.
Yes you should be able to use Dynamic SQL with Update statements. For example, the video that Chris linked to in his response above (at about 1:07) shows an example of an UPDATE statement being coded both as Static and Dynamic SQL. This example was using the Micro Focus OpenESQL Interface. If you are using another (database) vendor's product, that product probably also provides some support for Dynamic SQL - you'll need to check with the vendor's documentation to be sure.
I have a COBOL program and I want to use it with table A or table B, as both have the same structure and similar data, but I don't want to repeat every SQL stmt for both.. Instead of the next two selects, for example, I would like to use one select stmt with the tablename a variable.:
2000-get-record section.
EXEC SQL
Select * from A
where x = z
END-EXEC.
OR
2100-get-record section.
EXEC SQL
Select * from B
where x = z
END-EXEC.
.
Yes, apparently it can be done with Oracle, which we use, but by using host variables rather than ? placeholders. I need to look into it more.