我有一个包含插入查询的.sql文件。我将不得不更改插入查询(基本上所有ID都需要在查询中重置)然后执行。
我试过通过阅读.sql文件并尝试获取id但在这里我不确定当时的旧id是什么。如何找到旧ID并替换为新的?
有谁能建议我如何实现这个目标?
这是我的java和pl / sql代码:
ArrayDescriptor des = ArrayDescriptor.createDescriptor("OFSA.ARRAY_TABLE", con);
ARRAY array_to_pass = new ARRAY(des,con,array);
st = con.prepareCall("call OFSA.proc_test(?,?,?)");
st.setArray(1, array_to_pass);
st.registerOutParameter(2, Types.INTEGER);
st.registerOutParameter(3,OracleTypes.ARRAY,"OFSA.ARRAY _TABLE");
st.execute();
plsql代码:
CREATE OR REPLACE PROCEDURE PROC_TEST(P_ARRAY IN ARRAY_TABLE,
LEN OUT NUMBER,
OP_ARRAY OUT ARRAY_TABLE) AS
V_COUNT NUMBER;
BEGIN
OP_ARRAY := NEW ARRAY_TABLE();
OP_ARRAY.EXTEND(50);
LEN := P_ARRAY.COUNT;
FOR I IN 1 .. P_ARRAY.COUNT LOOP
在这里,我将不得不用新的id替换旧的id。但查询是在一个字符串中。而且我不知道我的身份证的确切位置..而且一些查询也可以有多个身份证。在这里,我需要找到id并替换为new。
答案 0 :(得分:0)
有两种选择:
不要使用存储过程
您的问题是标记为Java。只需在Java中创建所需的插入查询并直接运行它们,完全避免该过程。存储过程主要用于您希望轻松重新运行相同代码的情况。如果您每次都需要不同的代码,那么程序可能不适合您。
不要对存储过程中的ID进行硬编码
相反,以某种方式将ID传递给过程。
如果insert语句作用于单个ID,您只需将其作为参数传递,然后在查询中使用它。
如果该过程需要使用ID列表,则可能有一种传入数组的方法(取决于您的数据库)。另一种选择是将ID存储在表中,并使该过程使用该表。然后,您可以在调用该过程之前更新该表。