procere proc_test(
in_id in varchar2,
out_sum out varchar2
) as
begin
execute immediate 'select count(*) from table_name '||in_id into out_sum;
end;
/
sqlplus里調用時:
var out_sum varchar2(10)
exec package_name.proc_test('where id=''XXX'' or 1=1',:out_sum)
print out_sum
Ⅱ 求助一個oracle中sql語句動態拼接的問題
MSSQL到ORACLE還是有不小的差距。
如果在MSSQL里,可以這樣:
declare @sql nvarchar(max);
declare @tableName nvarchar(100);
set @sql = 'OPEN PCURSOR FOR
SELECT T.ID as OBJECTID,T.SHAPE.GET_WKT() as COORD
FROM ' + @tableName + ' T
WHERE instr(@OBJIDS,'',''||TO_CHAR(ID)||'','')>0';
sp_execute @sql, @OBJIDS=OBJIDS
(沒用Sql驗證,單詞拼寫可能有錯誤,語法也可能有錯誤)
Ⅲ oracle sql欄位值拼接問題
SELECT LPAD(CLO_NAME,LENGTH(CLO_NAME)+CLO_NUM) FROM TABLE_NAME
Ⅳ oracle 存儲過程執行動態sql實例
oracle的動態sql是指在語句塊使用execute immediate 執行sql語句,sql語句可以使用存儲過程傳的參數進行拼接,本文針對varchar2和number兩種類型的參數類型,進行sql拼接並執行。
功能:輸入日期區間,銷售數量滿足上限和下限的產品id
1.正常傳值
輸出結果
2.若果number類型的參數傳空,會報ora-00936:缺失表達式,可以在存儲過程中增加對參數null值的判斷
oracle 動態拼接傳入參數,varchar2類型可以使用'''|| IN_START_DTIME || ''' ,number類型可以使用'||IN_DOWN_LIMIT||' ; 拼接的過程需要注意校驗參數的合法性,增加存儲過程的容錯性。臨時表使用了會話級,存儲過程執行完,可以通過查詢存儲過程獲取結果。
Ⅳ oracle 在PLSQL腳本中如何表名稱與數字字元串拼接
使用plsql存儲過程製造一個腳本如:
create or replace procere test_val
(etl_date varchar2, --時間或者數字變數
data out sys_refcursor ---存放數據
) as
s_sql varchar2(1000); --執行sql
begin
s_sql := 'SELECT A,B FROM tsalpludetail' || etl_date ;
--dbms_output.put_line(s_sql);----列印sql可以不需要
open data for s_sql; ---把結果集放入data
end test_val;
執行後,打開存儲過程
至此完成
Ⅵ oracle中sql語句如何動態拼接
因為'x'||to_char(sysdate,'dd')=『xxxx』這個條件不滿足,所以查詢不到數據。
'x'||to_char(sysdate,'dd')明顯不等於'xxxx',能查詢到數據就是怪事了。
如果你想查詢到數據,必須保證'x'||to_char(sysdate,'dd')的值等於'xxxx'
就拿今天來說'x'||to_char(sysdate,'dd')的值肯定是x24。
'xxxx'的值是為xxxx,不等於x24。肯定查詢不到數據。
你這個語句就跟
select name from A where 1>2這個語句的效果一樣。
如果你的xxxx表示你表中的一個欄位,比如X1,X2..X31,
如:
select name from A where 'x'||to_char(sysdate,'dd')=x24;
你做關聯的是用你的欄位名,但是判斷取值的是時候,卻是取的x24這一列裡面的值。
如果x24這一列裡面有一列的值是x24,肯定查得出數據,如果沒有,肯定就查不出來,
你先確實有沒得x24這條數據記錄了來。。
Ⅶ oracle 求sql拼接方式
oracle中只有這樣的拼接了,除非你想用concat。不過此處concat肯定不適合你。
到到效果就可以了,而且性能還不差,何必一定要用append呢。
declare
avarchar2(100);
bvarchar2(100);
cvarchar2(100);
strvarchar2(32767);
inumber;
begin
str:='';
a:='aa';
b:='bb';
c:='cc';
loop
i=i+1;
ifi=1then
str:=a||b;
else
str:=str||c;
endif;
exitwheni=100;
endloop;
dbms_output.put_line(str);
end;