當前位置:首頁 » 編程語言 » oraclesql變數賦值

oraclesql變數賦值

發布時間: 2023-01-29 04:04:40

A. 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文件的指針。

B. oracle 中怎樣把查詢結果當做已知量或賦值給某個變數

需要寫存儲過程,先聲明兩個變數v_x,v_y,然後用select into語句賦值給這兩個變數.以下供參考:
declare
v_x NUMBER; --必須和addpoint(x,y,z)裡面的x欄位類型一致
v_y NUMBER; --必須和addpoint(x,y,z)裡面的y欄位類型一致
...
begin
select xxx,yyy into v_x, v_y from table; --把table表中xxx,yyy的值賦給v_x,v_y.你可以自己寫查詢
...
update station set set geom=addpoint(v_x,v_y,z)where id=1;
...
end

C. oracle 中動態sql語句,表名為變數,怎麼解

表名可用變數,但一般需要用到動態sql,舉例如下:
declare
v_date varchar2(8);--定義日期變數
v_sql varchar2(2000);--定義動態sql
v_tablename varchar2(20);--定義動態表名
begin
select to_char(sysdate,'yyyymmdd') into v_date from al;--取日期變數
v_tablename := 'T_'||v_date;--為動態表命名
v_sql := 'create table '||v_tablename||'
(id int,
name varchar2(20))';--為動態sql賦值
dbms_output.put_line(v_sql);--列印sql語句
execute immediate v_sql;--執行動態sql
end;
執行以後,就會生成以日期命名的表。

D. oracle的存儲過程,為什麼不允許直接在變數里賦值

oracle的存儲過程,不允許直接在變數里賦值是因為oracle存儲過程定義時並不會初始化變數的內存大小,只有使用的時候才會去分配。
oracle的存儲過程的基本語法:
一:存儲過程分部解析:
1 CREATE OR REPLACE PROCEDURE 存儲過程名
2 IS
3 BEGIN
4 NULL;
5 END;

行1:
CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle資料庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它;
行2:
IS關鍵詞表明後面將跟隨一個PL/SQL體。
行3:
BEGIN關鍵詞表明PL/SQL體的開始。
行4:
NULL PL/SQL語句表明什麼事都不做,這句不能刪去,因為PL/SQL體中至少需要有一句;
行5:
END關鍵詞表明PL/SQL體的結束
二:存儲過程創建語法:
create or replace procere 存儲過程名(param1 in type,param2 out type)
as
變數1 類型(值范圍); --vs_msg VARCHAR2(4000);
變數2 類型(值范圍);
Begin
//這里才可以給變數賦值
Select count(*) into 變數1 from 表A where列名=param1;

If (判斷條件) then
Select 列名 into 變數2 from 表A where列名=param1;
Dbms_output。Put_line(『列印信息』);
Elsif (判斷條件) then
Dbms_output。Put_line(『列印信息』);
Else
Raise 異常名(NO_DATA_FOUND);
End if;
Exception
When others then
Rollback;
End;

E. oracle存儲過程變數賦值報錯

ORACLE中字元串連接符是雙豎線「||」。
把代碼中的「+」換成「||」,另外,ddl語句不需要commit,去掉commit,代碼如下:
CREATE OR REPLACE PROCEDURE aaa_Zbflagexb(Vdwlx VARCHAR,
Vbzsj VARCHAR) IS
Vsql VARCHAR(8000);
Vtname VARCHAR(100);
Vtnameex VARCHAR(100);
BEGIN
Vtname := 'ZBFlag_' || Vdwlx;
Vtnameex := 'ZBFlagEx_' || Vdwlx;
Vsql := 'create table ' || Vtname ||
' (dwbh varchar(100),dwmc varchar(200),flag number(1),dwlx number) ';
EXECUTE IMMEDIATE Vsql;
--COMMIT;
END;

F. oracle 存儲過程 ,執行拼接sql,給制定參數賦值

execute immediate v_sql into rep_Val;

G. 問個oracle資料庫賦值語句

declare
bb table1.a%rowtype;
begin
select a into bb from table1 where b='1';
--dbms_output.put_line(bb);

你的查詢語句where條件裡面有b欄位,賦值最好換個變數名,要不要出問題

H. ORACLE存儲過程varchar2變數賦值問題。

看到錯誤提示的地方,你應該是想執行一個動態SQL(在open語句中str是一個變數, 但是想把str用成SQL語句的in字句的部分),這明顯是不對的(如果要用動態SQL,則是另外的寫法)。

可以open的查詢語句,直接在查詢語句中根據ORGCODE的值用case when構造查詢的條件。例如:

where(casewhenORGCODE='SH'andPORGCODEin('A','B','C')then'Y'
whenORGCODE='A'andPORGCODEin('A')then'Y'
...
else'N'end)='Y'

I. oracle sql語法 ①中的:1代表什麼;②中聲明的變數類型是什麼;③中的賦值語法是什麼

1. 這是一個綁定變數的標准寫法,:1可以理解為一個佔位符。OLTP系統裡面使用這種綁定變數的寫法可以減少硬解析的次數,減少對數據字典以及Latch的使用,單個語句上提升的不大,但是對於整體性能有很大的提升。
2. 聲明了一個number數組類型num_list,其最大存儲number元素的個數為20。java裡面類似於int[20]。
3. 聲明變數v_id 類型為num_list,並且初始化變數v_id的第一、二個element為100,101。

J. oracle存儲過程中給變數賦值帶有特殊符號

CREATEORREPLACEPROCEDUREttIS
v_sqlVARCHAR2(10000);
BEGIN
v_sql:='createtableaaasselect*frombbwherebb.b1like''123%''';
--EXECUTEIMMEDIATEv_sql;--這句你可以先屏蔽掉
dbms_output.put_line(v_sql);--把v_sql列印出來看看
END;

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:582
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:876
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:571
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:757
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:673
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1000
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:244
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:103
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:795
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:701