❶ plsql delete 表名無效
plsqldelete表名無效原因如下:
問題是不能將綁定變數用於表名,而Oracle文檔則是資料庫只使用綁定變數的值,不以任何方式解釋其內容。
另外,請注意,如果不是雙引號,對象名總是大寫的,因此必須查找t_name||'_OLD',而不是t_name||'_old'。
❷ PLSQL集合表類型與對象表區別
PLSQL表變數類型
TYPE typ_id_record is RECORD(
gid NUMBER(10);
gno NUMBER(5);
co NUMBER(5));
TYPE typ_record_table is table of typ_id_record;
注意:PLSQL表變數類型必須在包頭定義,否則會提示:Error:PLS-00642:不允許使用本地收集類型
集合在使用前需清空,typ_record_table.delete
對象表變數類型
CREATE OR REPLACE TYPE typ_id_object as OBJECT(
gid NUMBER(10);
gno NUMBER(5);
co NUMBER(5));
CREATE OR REPLACE TYPE typ_table_object as table of typ_id_object;
使用bulk collect批量獲取查詢結果集
bulk collect的使用區別
PLSQL表變數typ_record_table可以直接接受bulk collect,但對象表變數typ_object_table必須先進行轉換
如下所示:
PLSQL表變數typ_record_table
CREATE OR REPLACE PROCEDURE p_f4 IS
tab_ids type_record_table;
BEGIN
SELECT gp.gid, gp.gno, gp.co BULK COLLECT
INTO tab_ids
FROM p_table_test gp;
END p_f4;
對象表變數typ_table_object不能直接接受bulk collect,必須進行轉換
如下所示:
報錯:沒有足夠的值
CREATE OR REPLACE PROCEDURE p_f4 is
tab_ids type_table_object;
begin
select gp.gid,gp.gno,gp.co bulk collect
into tab_ids
from p_table_test gp;
end;
解決辦法: 將object變數進行轉換,如下所示:
CREATE OR REPLACE PROCEDURE p_f4 is
tab_ids type_table_object;
begin
select type_table_object(gp.gid,gp.gno,gp.co) bulk collect
into tab_ids
from p_table_test gp;
end;
❸ plsql查詢表中變數某段時間的值
select*
fromtabxxx
wheredtcol>=to_date('2017-06-01','yyyy-mm-dd')
anddtcol<=to_date('2017-06-3023:59:59','yyyy-mm-ddhh24:mi:ss')
❹ plsql中聲明變數時可以指定哪種類型的約束
主鍵約束(Primary Key constraint):要求主鍵列數據唯一,並且不允許為空。
唯一約束(Unique constraint):要求該列唯一,允許為空,但只能出現一個空值。
檢查約束(Check constraint):某列取值范圍限制,格式限制等,如有關年齡、郵箱(必須有@)的約束。
默認約束(Default constraint):某列的默認值,如在資料庫里有一項數據很多重復,可以設為默認值。
外鍵約束(Foreign Key constraint):用於在兩個表之間建立關系,需要指定引用主表的哪一列。
❺ PLSQL中,定義一個RECORD類型變數r1 table1%rowtype,怎麼樣將table1表中的一條記錄放到r1中,並且在r1中得
select table1.clo1,table1.clo2,table1.clo3 into r1.clo1,r1.clo2,r1.clo3 from table1
變數r1 是一個記錄類型哦,r1 的結構和表table1 的結構完全一樣,記錄類型一次只能接受一條數據哦, 你再運行的時候添加一個限制條件,保證查出來的記錄數只有一條,大概就這樣了,不懂再問
❻ oracle pl/sql中如何使用變數
定義並使用變數
PL/SQL有四種類型:標量類型,復合類型,引用類型 (reference),LOB(Large Obejct)類型
一、標量類型
最常用的就是標量類型,是指只能存放單個數值的變數,包括數字類型、字元類型、日期類型和布爾類型,每種類型又包含相應的子類型。
常量標量類型如下:
VARCHAR2 (n) , CHAR (n), NUMBER (p,s),DATE, TIMESTAMP , LONG , LONG RAW ,BOOLEAN,BINARY_INTEGER(僅 PL / SQL使用),BINARY_FLOAT和BINARY_DOUBLE(10g新引入的)
定義標量:
identifier [CONSTANT] datatype [NOT NULL] [:=| DEFAULT expr]
使用標量需要注意的是=號被:=取代,與delphi一樣的賦值符號@_@
例子:
v_name VARCHAR2 ( 10 );
v_rate CONSTANTS NUMBER ( 4 , 2 ) : = 3.04 ;
為了防止定義的變數類型與表中的欄位類型不一致,可以使用%TYPE來定義:
v_name employee.name % TYPE;
如上面所示,v_name的類型就與表 employee中的name欄位類型一樣!!
二、復合變數:
用於存放多個值的變數稱為復合變數,包括PL/SQL記錄,PL/SQL表,嵌套表和VARRAY四種類型
1.PL/SQL記錄
類似於C/C++中的結構概念:
declare
TYPE employee_record is RECORD(
id employee.id % TYPE,
name employee.name % TYPE,
email employee.email % TYPE);
em_record employee_record;
begin
select id,name,email into em_record from employee where name =& name;
dbms_output.put_line( ' 雇員名: ' || em_record.name || ' 雇員ID: ' || em_record.id);
end ;
2.PL/SQL表,類似於數組概念,不同的是PL/SQL表允許負值下標,而且沒有上下限,如:
declare
TYPE employee_table is table of employee.name % TYPE index by BINaRY_INTEGER;
em_table employee_table;
begin
select name into em_table( - 1 ) from employee where name =& name;
dbms_output.put_line( ' 雇員名: ' || em_table( - 1 ));
end ;
3.嵌套表,與PL/SQL 表相似,不同的是嵌套表可以做表列的數據類型,而PL/SQL表不能,使用嵌套表作為表列時,必須為其指定專門的存儲表,如:
create or replace TYPE emp_type as OBJECT(name VARCHAR2 ( 10 ),salary NUMBER ( 6 , 2 ),hiredate DATE);
CREATE OR REPLACE TYPE emp_array IS TABLE OF emp_type;
CREATE TABLE department(
deptno NUMBER ( 2 ),dname VARCHAR2 ( 10 ),
employee emp_array)NESTED TABLE employee STORE as employee_dept;
4.VARRAY(變長數組),與嵌套表相似,也可以做為表列的數據類型,但是嵌套表沒有個數限制,而VARRAY有個數限制,如:
CREATE TYPE TEST_ARRAY IS VARRAY(20) OF emp_type;
三、引用變數(reference)
類似於C++中的指針或者JAVA中引用的概念,用於存放數值指針的變數,使用此變數,可以使得應用程序共享相同對象,降低佔用空間。此類有兩種類型:游標(REF CURSOR)和對象類型(REF OBJECT)
1.REF CURSOR,定義時同時指定SELECT語句的游標稱為顯式或者靜態游標,在打開時才指定SELECT語句的游標稱為動態游標,如:
DECLARE
TYPE c1 IS REF CURSOR ;
emp_cursor c1;
v_name employee.name % TYPE;
v_sal employee.salary % TYPE;
begin
open emp_cursor for
SELECT name,salary FROM EMPLOYEE ;
LOOP
FETCH emp_cursor INTO v_name,v_sal;
EXIT WHEN emp_cursor % NOTFOUND;
dbms_output.put_line(v_name);
END LOOP;
close emp_cursor;
end ;
2.REF OBJECT,與JAVA的引用概念相同,存儲的是指向對象的指針
四、LOB類型
LOB類型是指用於存儲大批量數據的變數,包括內部的3種(CLOB,BLOB,NCLOB)和外部LOB(BFILE)。
CLOB,NCLOB用於存儲大量的字元數據。
BLOB用於存儲大批量二進制數據(如圖象)。
BFILE則存儲指向OS文件的指針。
❼ plsql如何測試sql,動態傳入變數值。 比如:user表有id,name,age。 updat
加&<name>
引號內同樣管用,字元類型
'&<name>' 或者 輸入的時候 加''
❽ 如何將表名作為參數變數傳給PLSQL中的函數
用動態SQL就可以了
CREATE OR REPLACE PROCEDURE COMMDEVIDEPAGE(P_TABLENAME IN VARCHAR2,
P_SIZE IN NUMBER,
P_PAGENOW IN NUMBER,
P_COUNT OUT NUMBER,
P_COUTPAGE OUT NUMBER,
P_CURSOR OUT SYS_REFCURSOR) IS
V_SQL VARCHAR2(1000);
V_SIZE NUMBER;
V_PAGENOW NUMBER;
V_BEGIN NUMBER;
V_END NUMBER;
BEGIN
V_SQL := 'SELECT COUNT(*) FROM ' || P_TABLENAME;
EXECUTE IMMEDIATE V_SQL
INTO P_COUNT; --計算總記錄數
--求總頁數
IF MOD(P_COUNT, P_SIZE) = 0 THEN
P_COUTPAGE := FLOOR(P_COUNT / P_SIZE);
ELSE
P_COUTPAGE := FLOOR(P_COUNT / P_SIZE) + 1;
END IF;
V_BEGIN := (P_PAGENOW - 1) * P_SIZE + 1;
V_END := P_PAGENOW * P_SIZE;
OPEN P_CURSOR FOR 'Select p.* From (Select Rid
From (Select Rid, Rownum Rn
From (Select Rowid Rid
From ' || P_TABLENAME || '
Where Promo_Id Is Not Null
Order By Promo_Id)
Where Rownum <=' || V_END || ')
Where Rn >=' || V_BEGIN || ') t,
' || P_TABLENAME || ' p
Where p.Rowid = t.Rid';
END COMMDEVIDEPAGE;
❾ plsql怎樣把存儲過程中查詢的表的值賦給變數
select count(*) into x from a
在ORACLE裡面直接這么寫就可以了。
❿ 使用plsqldev調試時,如何查看結構體變數的值
dev c++調試時查看變數的值的方法:
1、 開始調試後,在圖示區域按右鍵,選擇"添加監測(Add Watch)";或者直接按 F4;
2、在彈出窗口中輸入用戶想查看的變數名,然後按確定(OK),就可以看到該變數的值;
3、用滑鼠選擇源文件中的變數名,然後按 F4 也可以查看變數的值,該變數會出現在左邊的監測列表中;
4、如果用戶在環境選項(Environment Options)中選擇了"通過滑鼠監測變數(Watch variable under mouse)",用滑鼠指向您想要查看的變數一段時間,該變數也會被添加到監測列表中。
重要提示:
1). 當想查看指針指向的變數的值的時候,按 F4,然後輸入星號及指針的名字(如 *pointer)。
如果沒加 *,看到的將會是一個地址,也就是指針的值。
2). 有時,調試器(Debugger)可能不知道某個指針的類型,從而不能顯示該指針指向的變數的值。
此時,我們需要手動輸入該指針的類型。按 F4 後,以 *(type *)pointer 形式輸入。例如,
*(int *)pointer。