Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Oracle使用“选择结果”中的“全部插入”_Php_Sql_Oracle - Fatal编程技术网

Php Oracle使用“选择结果”中的“全部插入”

Php Oracle使用“选择结果”中的“全部插入”,php,sql,oracle,Php,Sql,Oracle,好了,这几个小时来一直在严重伤害我的大脑。在Oracle中不能将“全部插入”与“选择”一起使用吗 这是我得到的,它告诉我sql命令没有正确结束 INSERT ALL INTO ENVIRONMENT (NAME, ID, DESCRIPTION, START_DATE, END_DATE) VALUES(:name, :eId, :description, :sDate, :eDate) INTO ENVIRONMENT#URL (ID,

好了,这几个小时来一直在严重伤害我的大脑。在Oracle中不能将“全部插入”与“选择”一起使用吗

这是我得到的,它告诉我sql命令没有正确结束

   INSERT ALL 
            INTO ENVIRONMENT (NAME, ID, DESCRIPTION, START_DATE, END_DATE) VALUES(:name, :eId, :description, :sDate, :eDate)
            INTO ENVIRONMENT#URL (ID, ENVIRONMENT_ID, URL, URL_TYPE_ID) SELECT 600, :eId, :url, URL_TYPE.ID FROM URL_TYPE WHERE URL_TYPE.TYPE like :urlType
            INTO ENVIRONMENT#CONTACT (ID, ENVIRONMENT_ID, CONTACT_ID) SELECT 600, :eId, CONTACT.ID FROM CONTACT WHERE CONTACT.NAME like :contactName
    SELECT * FROM DUAL

这是使用php运行的,因此没有分号。如果它作为3个不同的insert语句运行,但它必须是一个查询,则此操作有效。我还可以怎么做呢?

我想您必须在插入所有零件后删除插入关键字,如下所示:

INSERT ALL 
            INTO ENVIRONMENT (NAME, ID, DESCRIPTION, START_DATE, END_DATE) VALUES(:name, :eId, :description, :sDate, :eDate)
            INTO ENVIRONMENT#URL (ID, ENVIRONMENT_ID, URL, URL_TYPE_ID) SELECT 600, :eId, :url, URL_TYPE.ID FROM URL_TYPE WHERE URL_TYPE.TYPE like :urlType
            INTO ENVIRONMENT#CONTACT (ID, ENVIRONMENT_ID, CONTACT_ID) SELECT 600, :eId, CONTACT.ID FROM CONTACT WHERE CONTACT.NAME like :contactName
SELECT * FROM DUAL
编辑

知道吗,现在我再看一些,我看到在最后两个INTO子句中还有其他SELECT语句。我认为INSERT ALL语法不允许这样做。我认为所有的子句都必须使用值

就个人而言,我不会使用INSERT ALL,而是尝试将3条普通INSERT语句包装在一个匿名PL/SQL块中,如下图所示。我不确定这在PHP中是如何工作的,我只是告诉您,从Oracle的角度来看,这是一条语句,它工作得很好:

BEGIN
  INSERT INTO ENVIRONMENT (NAME, ID, DESCRIPTION, START_DATE, END_DATE) VALUES(:name, :eId, :description, :sDate, :eDate);
  INSERT INTO ENVIRONMENT#URL (ID, ENVIRONMENT_ID, URL, URL_TYPE_ID) (SELECT 600, :eId, :url, URL_TYPE.ID FROM URL_TYPE WHERE URL_TYPE.TYPE like :urlType);
  INSERT INTO ENVIRONMENT#CONTACT (ID, ENVIRONMENT_ID, CONTACT_ID) (SELECT 600, :eId, CONTACT.ID FROM CONTACT WHERE CONTACT.NAME like :contactName);
END;

哎呀,当我问这个问题时,那实际上只是一个打字错误。我在问题中改变了它,问题仍然存在,英镑符号是怎么回事。您的表名真的是ENVIRONMENTURL和ENVIRONMENTCONTACT吗?我以前从未见过这种情况,我认为这可能是一个问题。这是表的名称,我知道它看起来有点滑稽,但它在许多其他查询中可靠地工作