Oracle 如何在表2中动态插入列值从另一个表1中选择*,该表的列数小于表2
表1: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
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_column4mon
不是字符串。这就是你传递的价值。在没有尝试解决方案的情况下,不要发布任何回复,如果你遇到任何问题,也要发布。我调用了这样的函数,但在最后一列中,不是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;