SQL> INSERT INTO TRANSACTION_DETAILS VALUES (9, 5, 9, 'Product I', 6.25, 3, 18.75); INSERT INTO TRANSACTION_DETAILS VALUES (9, 5, 9, 'Product I', 6.25, 3, 18.75) * ERROR at line 1: ORA-00913: too many values报错
时间: 2023-09-18 14:06:39 浏览: 40
这个错误提示通常是因为您插入的值的数量不匹配。在您的情况下,您可能想要检查您的 INSERT INTO 语句的 VALUES 子句,并确保每个 VALUES 子句中的值的数量与数据表中的列数相同。您可以尝试使用以下语句来插入两行数据:
```
INSERT INTO TRANSACTION_DETAILS
VALUES (9, 5, 9, 'Product I', 6.25, 3, 18.75),
(9, 5, 9, 'Product I', 6.25, 3, 18.75);
```
这将在一次操作中插入两行数据,避免了您之前遇到的错误。
相关问题
这是我的表结构CREATE TABLE IF NOT EXISTS fixed_transaction_details ( new_transaction_id string, customer_id string, store_id string, price decimal(8,2), product string, purchase_date string, purchase_time string ) row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde';这是我的另一个表结构drop table ext_transaction_details; create external table if not exists ext_transaction_details ( transaction_id string, customer_id string, store_id string, price decimal(8,2), product string, purchase_date string, purchase_time string ) partitioned by (year_month STRING) row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde' --this must tblproperties tblproperties ("skip.header.line.count"="1");我执行insert into table ext_transaction_details partition (year_month) select *,substring(purchase_date,0,7)as year_month from fixed_transaction_details;执行完毕后为什么ext_transaction_details表里的数据会比fixed_transaction_details表的数据少,我这里少了12条,两者的数量不应该完全一致吗
在你的操作中,你将数据从`fixed_transaction_details`表插入到`ext_transaction_details`表,并根据`purchase_date`字段的值来动态分区。根据你提供的信息,以下是可能导致数据不一致的一些原因:
1. 数据筛选:在`select`语句中,你使用了`substring(purchase_date, 0, 7)`来生成`year_month`分区字段。这意味着只有`purchase_date`字段的前7个字符会被用作分区值。如果存在`purchase_date`值不同但前7个字符相同的情况,这可能导致数据被筛选掉或者被插入到不同的分区中。
2. 数据类型不匹配:请确保`fixed_transaction_details`表和`ext_transaction_details`表中的字段类型完全匹配,包括长度和精度。如果字段类型不匹配,可能会导致数据插入失败或者丢失一些记录。
3. 行数据重复:如果在插入数据之前,`ext_transaction_details`表中已经存在某些相同的分区数据,那么新插入的数据可能会被视为重复数据而被过滤掉。
4. 确认分区字段:请确保你在动态分区插入语句中正确指定了分区字段,确保它与表定义中的分区字段名一致。
建议你检查以上因素,以确定为什么`ext_transaction_details`表中的数据比`fixed_transaction_details`表少了12条。你可以逐一排查这些原因并进行验证。如果有更多疑问,请随时提问。
SQL> DECLARE 2 v_key RAW(32); 3 BEGIN 4 v_key := UTL_RAW.cast_to_raw('251251'); 5 UPDATE TRANSACTION_DETAILS 6 SET Price = DBMS_CRYPTO.ENCRYPT( 7 src => UTL_RAW.cast_to_raw(TO_BINARY_FLOAT(Price)), 8 typ => DBMS_CRYPTO.DES_CBC_PKCS5, 9 key => v_key, 10 iv => NULL 11 ) 12 WHERE Price IS NOT NULL; 13 END; 14 / SET Price = DBMS_CRYPTO.ENCRYPT( * ERROR at line 6: ORA-06550: line 6, column 28: PL/SQL: ORA-00932: inconsistent datatypes: expected NUMBER got BINARY ORA-06550: line 5, column 4: PL/SQL: SQL Statement ignored 怎么解决
这个错误是因为在 UPDATE 语句中,尝试将 BINARY 类型的值转换为 NUMBER 类型。可以使用 TO_NUMBER 函数将二进制值转换为数字,然后再进行加密。
下面是修改后的代码:
```
DECLARE
v_key RAW(32);
BEGIN
v_key := UTL_RAW.cast_to_raw('251251');
UPDATE TRANSACTION_DETAILS
SET Price = DBMS_CRYPTO.ENCRYPT(
src => UTL_RAW.cast_to_raw(TO_BINARY_FLOAT(TO_NUMBER(Price))),
typ => DBMS_CRYPTO.DES_CBC_PKCS5,
key => v_key,
iv => NULL
)
WHERE Price IS NOT NULL;
END;
/
```
请注意,这个代码假定 Price 是一个可以转换为数字的值。如果 Price 不是数字类型的话,需要使用相应的 TO_xxx 函数进行转换。