免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4452 | 回复: 2
打印 上一主题 下一主题

[求助] 使用DECLARE 當SELECT WHERE 條件? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-27 16:56 |显示全部楼层 |倒序浏览
本帖最后由 hartball38 于 2014-08-29 13:44 编辑

您好:
請問
若有一個表格:
CREATE TABLE student (
  id smallint PRIMARY KEY,
  first_name VARCHAR(80) NOT NULL,
  last_name VARCHAR(80) NOT NULL);

insert into student VALUES(10,'AA','A01');
insert into student VALUES(30,'BB','B01');


---MSSSQL  OK
declare @v_first  varchar(10);
set @v_first='AA';
select * from student where first_name=@v_first;

但是在ORACLE, 該如何來用呢?
---以下語法錯誤...
declare v_first varchar2(10);
BEGIN
  v_first :='AA';
  select * from student where first_name= v_first;
END;

---->
命令的第 19 行開始發生錯誤 -
declare v_first varchar2(10);
BEGIN
  v_first :='AA';
  select * from student where first_name= v_first;
END;
錯誤報告 -
ORA-06550: 第 4 行, 第 3 個欄位:
PLS-00428: 在此 SELECT 敘述句中預期會出現一個 INTO 子句
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

论坛徽章:
0
2 [报告]
发表于 2014-09-02 09:11 |显示全部楼层
您好:
謝謝,
我有找到, 我要先設一個 XX%Rowtype 類型 來給 select   *  into  XX ...
且這一個 RowType 也只能接收 一筆Row的資料,沒辦法接收 多筆ROW的資料

??

论坛徽章:
0
3 [报告]
发表于 2014-09-03 11:25 |显示全部楼层
回复 2# jackson198574

您好:
想再延續該問題,請教BEGIN中用到暫存表格 與  SESSION 的問題

Q1.BEGIN  END 中,用select ,必須用 into 來承接資料,若次select 出多筆,則似乎要用暫存表來接?
沒有其他辦法嗎?

Q2.若要用到暫存表,又有分SESSION 與TRAINSATION
請問SESSION 是指 開啟一個 SQL PLUS ,算一個SESSION
還是  只要用同一個帳號登入,就算一個SESSION

因為,
SQL_PLUS 01:
CREATE GLOBAL TEMPORARY TABLE emp_tmp
         ON COMMIT DELETE ROWS
as select * from emp;

insert into emp_tmp
select * from emp where empid = 00101;

--尚未COMMIT;
select * from emp_tmp;  --->有資料

SQL_PLUS 02: 同USER
select * from emp_tmp;  --->沒有資料  


且,就算我把SQL PLUS 全部關掉,再重開一個SQL PLUS03,同帳號登入
這時,該EMP_TMP的結構仍會存在..

SQL DEVELOPER 開啟一個工作表,算一個SESSION 嗎?感覺好像不是...

Q2-1請問結構不會自動刪除嗎?
MSSQL 使用 @ 或 @@暫存表,關掉SSMS 該TABLE 就會消失。


Q3.若用 PRESERVE ROWS
CREATE GLOBAL TEMPORARY TABLE emp_tmp
         ON COMMIT PRESERVE ROWS
as select * from emp

他會把順便所有emp資料一起寫入,並不像   PRESERVE 那樣 只建架構?
這樣正確嗎?

Q4.若是在BEGIN ~END中 要撈取多筆資料,一般要如何做?

謝謝!

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP