在为简单的insert..select stmnt编写下面的代码后,我收到错误。我很困惑,因为语法似乎没有错。
INSERT INTO dimension_tab(FACT_1_ID,FACT_2_ID,FACT_3_ID,FACT_4_ID,SALES_VALUE)
SELECT TRUNC(DBMS_RANDOM.value(low => 1, high => 3)) AS fact_1_id,
TRUNC(DBMS_RANDOM.value(low => 1, high => 6)) AS fact_2_id,
TRUNC(DBMS_RANDOM.value(low => 1, high => 11)) AS fact_3_id,
TRUNC(DBMS_RANDOM.value(low => 1, high => 11)) AS fact_4_id,
ROUND(DBMS_RANDOM.value(low => 1, high => 100), 2) AS sales_value
FROM dual
CONNECT BY level <= 1000;
COMMIT;
答案 0 :(得分:0)
您使用的是有效语法,但在使用oracle 10g时,它不支持=>
,因此您必须将(low => 1, high => 3)
替换为(1, 3)
。
试试这个,
INSERT INTO dimension_tab
SELECT TRUNC(DBMS_RANDOM.value( 1, 3)) AS fact_1_id,
TRUNC(DBMS_RANDOM.value( 1, 6)) AS fact_2_id,
TRUNC(DBMS_RANDOM.value( 1, 11)) AS fact_3_id,
TRUNC(DBMS_RANDOM.value( 1, 11)) AS fact_4_id,
ROUND(DBMS_RANDOM.value( 1, 100), 2) AS sales_value
FROM dual
CONNECT BY LEVEL <= 1000;
答案 1 :(得分:0)
DBMS_RANDOM.VALUE的语法是
DBMS_RANDOM.VALUE(
low IN NUMBER,
high IN NUMBER
)
所以你可以这样使用......
INSERT INTO dimension_tab (FACT_1_ID,FACT_2_ID,FACT_3_ID,FACT_4_ID,SALES_VALUE)
SELECT TRUNC(DBMS_RANDOM.value( 1, 3)) AS fact_1_id,
TRUNC(DBMS_RANDOM.value( 1, 6)) AS fact_2_id,
TRUNC(DBMS_RANDOM.value( 1, 11)) AS fact_3_id,
TRUNC(DBMS_RANDOM.value( 1, 11)) AS fact_4_id,
ROUND(DBMS_RANDOM.value( 1, 100), 2) AS sales_value
FROM dual
CONNECT BY LEVEL <= 1000;
COMMIT;