我试图在一次oci_execute()PHP 调用中发出多个 INSERT 语句。问题是我收到此错误:
ORA-00911: invalid character
Run Code Online (Sandbox Code Playgroud)
我猜这是;在每个语句之后。
所以现在,我的问题是我如何制作多个可以在其中工作的 INSERT 语句oci_execute()?
到目前为止,这是我的查询:
INSERT INTO tbl (id, name) VALUES(1, 'John');
INSERT INTO tbl (id, name) VALUES(2, 'Martha');
INSERT INTO tbl (id, name) VALUES(3, 'Richard')
Run Code Online (Sandbox Code Playgroud)
编辑:
请注意,;我的查询末尾没有,因为我使用的是 SQL 语句。
我已经阅读了this、this和this,但我无法使这个 SQL 工作:
INSERT INTO main_phrase (description) VALUES ('Mot commun féminin pluriel animaux');
/* ERROR: */
WITH
t1 AS (
SELECT id
FROM main_phrase
WHERE description='Mot commun féminin pluriel animaux'
),
t2 AS (
SELECT id
FROM main_groupecategories
WHERE description='Mot commun féminin pluriel animaux'
)
INSERT
INTO main_phrasegroupecategories (phrase_id, groupe_categories_id)
VALUES (t1.id, t2.id);
Run Code Online (Sandbox Code Playgroud)
我得到:
错误:表 t1 的 FROM 子句缺少条目
我错过了什么?
postgresql many-to-many common-table-expression sql-insert sql-returning
我有下表:
EMPNO(number), ENAME(varchar), JOB(char), MGR(number), HIREDATE(date), SAL(number), DEPTNO(number)
Run Code Online (Sandbox Code Playgroud)
我尝试插入以下内容:
insert into EMP_TF1605(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
values(7369, 'SMITH', 'CLERK', 7902, 17-DEC-1980, 800, 20);
Run Code Online (Sandbox Code Playgroud)
结果:发生错误。重新检查您的 SQL 语句
我确定这是不正确的日期?
我有两个表:
CREATE TABLE tbl_a (
id serial primary key NOT NULL,
name text NOT NULL,
tbl_b_reference NOT NULL
)
CREATE TABLE tbl_b (
id serial primary key NOT NULL,
status text)
Run Code Online (Sandbox Code Playgroud)
我想做两个插入。一个在 tbl_b 中,然后在我插入 tbl_a 时使用该插入中的 ID。
我试过这个:
INSERT INTO tbl_a(name, tbl_b_reference)
VALUES ("myName", (INSERT INTO tbl_b (status) VALUES ('OK') RETURNING id));
Run Code Online (Sandbox Code Playgroud)
但我只收到指向第二个“INTO”的语法错误
ERROR: syntax error at or near "INTO" Position: 68
Run Code Online (Sandbox Code Playgroud)
我从哪里开始,是否可以在不编写永久函数或创建触发器的情况下做到这一点?我是 postgres 的新手,只知道 MySQL/MariaDB 的一些基础知识。我一直在这里搜索与嵌套插入相关的其他问题,但找不到我设法实际使用的东西,因此非常感谢代码示例。
我有stock_price_code如下表格。value列有UNIQUE约束。
create table stock_price_code (
id serial primary key,
value text not null,
unique (value)
);
Run Code Online (Sandbox Code Playgroud)
我想INSERT进入表格,如果没有找到value. 我有这两个查询:
-- query 1
INSERT INTO stock_price_code (value)
SELECT 'MCD'
WHERE NOT EXISTS (SELECT * FROM stock_price_code WHERE value = 'MCD')
RETURNING id;
-- query 2
INSERT INTO stock_price_code (value) VALUES ('MCD')
ON CONFLICT (value) DO NOTHING
RETURNING id;
Run Code Online (Sandbox Code Playgroud)
我query 1在 Postgres 9.5 之前使用。然后 Postgres 9.5 开始引入INSERT ... ON CONFLICT …
有这种情况涉及通过从另一个表复制一些列并从该插入中返回生成的键来插入到表中。使用 Oracle 数据库。
这基本上是本能的结果来编写这个查询。
INSERT INTO TBL_XXX
SELECT COLA, COLB, COLC FROM TBL_YYY
RETURNING COLA INTO COL_RES
Run Code Online (Sandbox Code Playgroud)
出于某种正当理由,这是不允许的。
有没有替代方法?
考虑这个表:
CREATE TABLE t (i int, j int, ...);
Run Code Online (Sandbox Code Playgroud)
我想从一组SELECT语句中将数据插入到表中。我的查询的简化版本是:
INSERT INTO t VALUES ((SELECT 1), (SELECT 2), ...);
Run Code Online (Sandbox Code Playgroud)
真正的查询可能要复杂得多,并且各个子查询是独立的。不幸的是,这个标准 SQL 语句(适用于 SQL Server)不适用于 SQL 数据仓库。出现以下错误:
无法执行查询。错误:插入值语句只能包含常量文字值或变量引用。
有没有办法解决这个问题?
我正在尝试将多行插入到一个表中,其中一列的值来自另一个查询。但是我收到以下错误
用作表达式的子查询返回的多行
我该怎么做?
INSERT INTO
accounts_account_preferences (account_id, preference_id)
VALUES
((SELECT account_id
FROM accounts_account_preferences
WHERE preference_id = 1), 2);
Run Code Online (Sandbox Code Playgroud) 考虑表标记:
mysql> SELECT * FROM marks;
+--------+------------+-----------------------+
| name | percentage | email |
+--------+------------+-----------------------+
| Bipin | 84% | bipin_p@gmail.com |
| Deepak | 78% | cool_deepak@gmail.com |
| Rohith | 82% | rohith_s@gmail.com |
| Sujit | 94% | sujit_jos@gmail.com |
+--------+------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)
当我进行以下查询以向表中插入值时,导致错误:
mysql> INSERT INTO marks VALUES('&name','&percentage','&email');
ERROR 1406 (22001): Data too long for column 'percentage' at row 1
Run Code Online (Sandbox Code Playgroud)
它是作为基于有关在 SQL 中使用 ('&') 插入值的另一种方法的信息的实验而完成的。
你能具体说明哪里出了问题吗?根据博客,只需按 ENTER 即可在查询后插入值。
所需的输出:
Enter value for name: John
Enter value for percentage: …Run Code Online (Sandbox Code Playgroud) 从另一个表中插入多行时,我将如何将“UPSERT”(插入或更新)插入到 SQLite 表中。
我试过了:
INSERT INTO tab_name
SELECT * FROM tmp
ON CONFLICT(id)
DO UPDATE SET
val = excluded.val;
Run Code Online (Sandbox Code Playgroud)
但它给了我:
“DO”附近的语法错误
实现这一目标的正确和最有效的方法是什么?
sql-insert ×10
sql ×7
postgresql ×4
oracle ×2
azure ×1
azure-sqldw ×1
date ×1
insert ×1
many-to-many ×1
mysql ×1
php ×1
select ×1
sql-update ×1
sqlite ×1
t-sql ×1
upsert ×1