Oracle 如何在表2中动态插入列值从另一个表1中选择*,该表的列数小于表2

Oracle 如何在表2中动态插入列值从另一个表1中选择*,该表的列数小于表2,oracle,plsql,Oracle,Plsql,表1: t1_column1 t1_column2 t1_column3 1 2 3 2 3 4 这里我将值作为函数参数传递,但是 尝试创建此函数时出现以下错误:错误(11,7): PL/SQL:SQL语句被忽略,错误(11108):PL/SQL:ORA-00917: 缺少逗号 试试这个: CREATE OR REPLACE FUNCTION NEW_PURCHASE (GODOWN_CODE IN

表1:

t1_column1  t1_column2  t1_column3
 1           2           3
 2           3           4

这里我将值作为函数参数传递,但是 尝试创建此函数时出现以下错误:错误(11,7): PL/SQL:SQL语句被忽略,错误(11108):PL/SQL:ORA-00917: 缺少逗号

试试这个:

CREATE OR REPLACE FUNCTION NEW_PURCHASE (GODOWN_CODE   IN VARCHAR2,
                                         MON           IN VARCHAR2)
   RETURN VARCHAR2
IS
   --var_mon   VARCHAR2 (100);
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   --var_mon := 'MON';

   INSERT INTO table2 (t2_column1,
                       t2_column2,
                       t2_column3,
                       t2_column4)
      SELECT t1_column1, t1_column2, t1_column3, mon           
      FROM table1
       WHERE t1_column1 = GODOWN_CODE;

   DELETE FROM table1
         WHERE t1_column1 = GODOWN_CODE;

   COMMIT;
   RETURN 'done';
END NEW_PURCHASE;
请注意,如果在
函数中执行
DML
操作,则
无法从
select
语句调用它,您将需要一个PLSQL块来运行它

例如:

你可以这样称呼它:

declare
   l_message varchar2(30);
begin
   l_message := test_func('123');
end;
。。。但不是这样:

select test_func(empno) from emp;

t2.mon作为var\u mon
这是错误的,它应该可以工作。你的最后一个问题也发生了什么。您没有通过接受任何答案来结束此操作。在insert语句中不需要使用列别名。正如@XING所说,“t2.mon As varu_mon”是错误的。只需从“插入列”列表和“选择列”列表中删除列别名。通过此操作,我可以将mon值插入到t2_column4吗?这里我认为“mon”是字符串,但我想将mon参数值插入到表2中t2_column4
mon
不是字符串。这就是你传递的价值。在没有尝试解决方案的情况下,不要发布任何回复,如果你遇到任何问题,也要发布。我调用了这样的函数,但在最后一列中,不是30,MON插入声明l_消息varchar2(30); 开始L_消息:=新购买('12','30');结束;我接受了你的回答,我被选为“妈妈”,现在意识到了
declare
   l_message varchar2(30);
begin
   l_message := test_func('123');
end;
select test_func(empno) from emp;