CREATE OR REPLACE PROCEDURE get_dev_cs IS sql_tem VARCHAR2(4000); v_dt NUMBER; BEGIN FOR v_dt IN (SELECT to_number(substr(table_name, '15')) db FROM sys.all_tables a WHERE a.owner = upper('jour1') AND a.table_name LIKE upper('om_subscriber_202___') AND substr(table_name, '15') > 202205) LOOP -- 循环往b里添加数据 sql_tem := ' INSERT INTO ycyd.Subscriber_cs SELECT a.order_id, a.done_date, a.cust_id, a.subscriber_ins_id, a.access_num FROM jour1.om_subscriber_ ' || v_dt || ' a WHERE a.action = 0'; -- 执行sql EXECUTE IMMEDIATE sql_tem; END LOOP; END ; 调用'||'时参数个数或类型错误 修正代码
时间: 2024-02-14 12:28:36 浏览: 348
在你提供的代码中,有一个错误导致了参数个数或类型错误。问题出在循环中拼接 SQL 语句时,你没有将 `v_dt` 转换为字符串类型。下面是修正后的代码:
```sql
CREATE OR REPLACE PROCEDURE get_dev_cs IS
sql_tem VARCHAR2(4000);
v_dt NUMBER;
BEGIN
FOR v_dt IN (SELECT to_number(substr(table_name, '15')) db
FROM sys.all_tables a
WHERE a.owner = upper('jour1')
AND a.table_name LIKE upper('om_subscriber_202___')
AND substr(table_name, '15') > 202205) LOOP
-- 循环往b里添加数据
sql_tem := '
INSERT INTO ycyd.Subscriber_cs
SELECT a.order_id,
a.done_date,
a.cust_id,
a.subscriber_ins_id,
a.access_num
FROM jour1.om_subscriber_' || v_dt.db || ' a
WHERE a.action = 0';
-- 执行sql
EXECUTE IMMEDIATE sql_tem;
END LOOP;
END ;
```
在修正后的代码中,我们使用 `v_dt.db` 来获取循环中的每个迭代的值,并将其作为字符串类型拼接到 SQL 语句中。
请注意,代码中还有其他可能需要根据实际情况进行调整的部分,比如表名、列名、条件等。在执行这段代码之前,请确保你已经根据实际情况进行了适当的修改。
阅读全文