Oracle does not use question marks as place holders. It uses the host variable notation. By convention, the place holders are named Vn, where n is a number to make the place holder unique within a statement. For readability the same place holder can be used more than once, but when the statement is executed (or opened if you are using a cursor), there must still be one host variable for each place holder. For example:
string "update ordtab " delimited by size
"set order_no = :v1, "
"line_no = :v2, "
"cust_code = :v3, "
"part_no = :v4, "
"part_name = :v5, "
"order_val = :v6, "
"pay_value = :v7 "
"where order_no = :v1 and "
"line_no = :v2 and "
"cust_code = :v3 " delimited by size
into Updt-Ord-Stmt-Arr
end-string
move 190 to Updt-Ord-Stmt-Len
EXEC SQL PREPARE updt_ord FROM :Updt-Ord-Stmt END-EXEC
EXEC SQL EXECUTE updt_ord USING
:dcl-order-no, :dcl-line-no, :dcl-cust-code,
:dcl-part-no, :dcl-part-name:ind-part-name,
:dcl-order-val,:dcl-pay-value,
:dcl-order-no, :dcl-line-no, :dcl-cust-code
END-EXEC
where Updt-Ord-Stmt has been defined as a host variable type of VARYING.