我PLS-00355在嘗試創建這樣的新型別時遇到錯誤:
CREATE OR REPLACE TYPE DAYS_T IS TABLE OF VARCHAR(250) INDEX BY BINARY_INTEGER;
任何線索出了什么問題?非常感謝!
uj5u.com熱心網友回復:
這就是您所做的以及 Oracle 的回應方式:
SQL> CREATE OR REPLACE TYPE DAYS_T IS TABLE OF VARCHAR(250) INDEX BY BINARY_INTEGER;
2 /
Warning: Type created with compilation errors.
SQL> show err
Errors for TYPE DAYS_T:
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
1/16 PLS-00355: use of pl/sql table not allowed in this context
另一方面:
SQL> CREATE OR REPLACE TYPE DAYS_T IS TABLE OF VARCHAR2(250);
2 /
Type created.
SQL>
回應您的評論:如果您在 PL/SQL 級別(而不是 SQL)宣告了型別,那么您的代碼(create or replace盡管沒有)就可以了(第 2 行是您使用的,字面意思):
SQL> declare
2 TYPE DAYS_T IS TABLE OF VARCHAR(250) INDEX BY BINARY_INTEGER;
3 begin
4 null;
5 end;
6 /
PL/SQL procedure successfully completed.
SQL>
uj5u.com熱心網友回復:
您可以使用以下方法在 SQL 范圍內定義嵌套表集合型別:
CREATE OR REPLACE TYPE DAYS_T IS TABLE OF VARCHAR(250);
您可以使用以下命令在 PL/SQL 范圍內定義關聯陣列集合型別:
DECLARE
TYPE DAYS_T IS TABLE OF VARCHAR(250) INDEX BY BINARY_INTEGER;
BEGIN
NULL;
END;
/
您還可以使用以下方法在 PL/SQL 范圍內本地定義嵌套表集合型別:
DECLARE
TYPE DAYS_T IS TABLE OF VARCHAR(250);
BEGIN
NULL;
END;
/
但是,您不能在 SQL 范圍內定義關聯陣列集合型別,因為它是僅限 PL/SQL 的資料型別。
然后你在評論中問:
但是如何添加索引呢?
他們都有一個索引。
例如,在 SQL 中宣告型別后,您可以像這樣在 PL/SQL 中使用嵌套表集合:
DECLARE
v_days DAYS_T;
BEGIN
v_days := DAYS_T(); -- Initialise the collection.
v_days.EXTEND(3); -- Extend the collection by 3 elements.
v_days(1) := 'Monday'; -- Set the first element.
v_days(3) := 'Wednesday'; -- Set the third element.
FOR i IN 1 .. v_days.COUNT LOOP
DBMS_OUTPUT.PUT_LINE( i || ' = ' || v_days(i) );
END LOOP;
END;
/
哪些輸出:
1 = Monday 2 = 3 = Wednesday
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/333128.html
上一篇:Oracle-將字串轉換為時間戳
下一篇:如何在Oracle中將`(12345)some_string`的一列字串拆分為兩列`12345`、`some_string`
