㈠ 用plsql編寫一個過程,可以輸入一個雇員編號,如果該雇員的所屬部門為10輸出該雇員的姓名
create or replace procere sp_pro(spNo number) is
v_ename emp.ename%type;
v_empno emp.empno%type;
v_job emp.job%type;
begin
select empno,ename,emp.job into v_empno, v_ename,v_job from emp where empno=spNo;
if v_empno='10' then
dbms_output.put_line('雇員名:'||v_ename);
elsif v_empno='20' then
dbms_output.put_line('姓名:'||v_ename||'編號:'||v_empno);
else
dbms_output.put_line('姓名:'||v_ename||'編號:'||v_empno||'職位:'||v_job);
end if;
end;
/
㈡ Oracle plsql編程的三道題目
4、使用case語句更新工資,10部門提高100,20部門提高200,30部門提高300,40部門提高400。
setserveroutputon
declarev_dptemp.dpt%type;
begin
selectdptintov_dptfromempwherename='zhangsan'
case
whenv_dpt='10'then
updateempsetsal=sal+100wherename='zhangsan';
whenv_dpt='20'then
updateempsetsal=sal+200wherename='zhangsan';
whenv_dpt='30'then
updateempsetsal=sal+300wherename='zhangsan';
whenv_dpt='40'then
updateempsetsal=sal+400wherename='zhangsan';
else
dbms_output.put_line('無法更新!');
endcase;
end;
5、分別使用3種循環計算10的階乘
簡單(loop)循環
declareinumber(2):=1;snumber(10):=1;
begin
loops:=s*i;
i:=i+1;
dbms_output.put_line(s);
exitwheni>10;
endloop;
end;
for循環
declareinumber(2):=1;snumber(10):=1;
begin
loop
s:=s*i;
i:=i+1;
dbms_output.put_line(s);
exitwheni>10;
endloop;
end;
while循環
declareinumber(2):=1;snumber(10):=1;
begin
whilei<=10loop
s:=s*i;
i:=i+1;
dbms_output.put_line(s);
endloop;
end;
6、使用for循環輸出一個實心三角形,底邊長由用戶輸入。
核心代碼:
begin
foriin1..5loop
dbms_output.put_line(rpad(i,8-i,'')||rpad('*',2*i-1,'*'));
endloop;
end;
㈢ 在plsql中,編寫一個函數,怎麼編寫
直接sql語句:
select wm_concat(decode(e.empno,7369,d.dname,null)),wm_concat(decode(e.empno,7369,e.ename,null)) from emp e, dept d
where e.empno in ((select e1.mgr from emp e1 where e1.empno = 7369), 7369)
and e.deptno = d.deptno
/
function :
createorreplacefunctionprint_(p_empnoinnumber)returnvarchar2is
l_resultvarchar2(100);
begin
selectwm_concat(decode(e.empno,p_empno,d.dname,null))||','||wm_concat(decode(e.empno,p_empno,e.ename,null))
intol_result
fromempe,deptd
wheree.empnoin
((selecte1.mgrfromempe1wheree1.empno=p_empno),p_empno)
ande.deptno=d.deptno;
return(l_result);
end;
測試:
SQL>selectprint_(7369)fromal;
PRINT_(7369)
--------------------------------------------------------------------------------
RESEARCH,SMITH
SQL>
㈣ PLSQL編程查詢問題 實驗內容 使用Scott用戶登錄YGGL資料庫,基於Scott用戶的em
DECLARE
V_EMPNO EMP.EMPNO%TYPE:=&v;
V_DEPTNO EMP.DEPTNO%TYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE('V_EMPNO='||V_EMPNO);
SELECT DEPTNO INTO V_DEPTNO FROM EMP E WHERE E.EMPNO =V_EMPNO;
UPDATE EMP E
SET E.SAL = E.SAL + (CASE E.DEPTNO
WHEN 10 THEN
100
WHEN 20 THEN
200
WHEN 30 THEN
300
ELSE
0
END)
WHERE E.EMPNO = V_EMPNO;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('NO DATA FOUND');
END;
DECLARE
V_ENAME EMP.ENAME%TYPE:='SMITH';
V_COUNT NUMBER:=0;
V_SAL EMP.SAL%TYPE;
V_EMPNO EMP.EMPNO%TYPE;
CURSOR C IS SELECT EMPNO,SAL FROM EMP WHERE ENAME=V_ENAME;
BEGIN
SELECT COUNT(1) INTO V_COUNT FROM EMP E WHERE E.ENAME =V_ENAME;
IF V_COUNT=1 THEN
SELECT E.SAL INTO V_SAL FROM EMP E WHERE E.ENAME =V_ENAME;
DBMS_OUTPUT.PUT_LINE('SAL='||V_SAL);
ELSE
FOR V IN C LOOP
DBMS_OUTPUT.PUT_LINE('EMPNO='||V.EMPNO||',SAL='||V.SAL);
END LOOP;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('NO DATA FOUND');
END;
㈤ 這個plsql的程序哪裡不對呢第七行一直報錯! 說是字元到數值的轉換錯誤,我抄寫的書上的例子
改成這樣試試vid:=to_number(&teacher_id)
㈥ 請幫忙編寫一條PLSQL語句,包含年齡和時間
大概是這樣:
select p.name,p.age,r.registerdate,r.doctor
from t_patient p, t_patientregister r
where p.patientid = r.patientid
and to_char(t.registerdate,'yyyy-mm-dd') = '2000-01-01'
㈦ plsql developer 怎麼編寫pl/sql程序
1、首先plsql developer連接小編這里就不做介紹了大家不知道可以看看這篇文章:http://www.pc6.com/infoview/Article_74137.html
2、登陸成功後即可進入對象瀏覽器窗口界面
3、在對象瀏覽器選擇「my object」,這里邊就是SCOTT(當前登陸的用戶的所有object)
4、找到table文件夾,里邊就是當前賬戶的所有表格
5、選中需要查看的表——》右鍵——》選中「查詢數據」【query data】,即可看到數據了
6、新建——》選中sql window,即可打開sql窗口了
7、在sql窗口內輸入sql語句,全選,點擊執行即可查看到結果,功能很強大
8、選中表——》右鍵——》Edit(編輯),可以對表進行編輯。
㈧ plsql怎樣編寫腳本
plsql怎樣編寫腳本
1.將以上內容存為shortcuts.txt,復制到X:\Program Files\PLSQL Developer\PlugIns目錄下,Win7要注意許可權
2.菜單中選 Tools -> Perferences -> Editor -> Autoreplaces
3.重啟PL/SQL Developer,輸入等號左側縮寫按下「空格」,會自動補全,那個效率啊;)
㈨ Oracle plsql編程的3道題目
1、用戶輸入雇員編號,查詢該雇員的所有信息。
createorreplaceprocerep_test1
(v_empnonumber)
as
v_enamevarchar2(10);
v_jobvarchar2(20);
v_mgrnumber;
v_hiredatevarchar2(10);
v_salnumber;
v_commnumber;
v_deptnonumber;
begin
selectename,job,mgr,to_char(hiredate,'yyyy-mm-dd'),sal,comm,deptnointo
v_ename,v_job,v_mgr,v_hiredate,v_sal,v_comm,v_deptno
fromempwhereempno=v_empno;
dbms_output.put_line(v_empno||','||v_ename||','||v_job||','||v_mgr||','||v_hiredate||','||v_sal||','||v_comm||','||v_deptno);
end;
2、用戶輸入雇員編號,將該雇員的工資提高500。
createorreplaceprocerep_test2
(v_empnonumber)
as
begin
updateempsetsal=sal+500whereempno=v_empno;
commit;
end;
3、用戶輸入雇員姓名,如果該雇員的工資低於2000,則將他的工資提高500,如果該雇員的工資高於3000,則將他的工資降低500,否則不變。
createorreplaceprocerep_test3
(v_enamevarchar2)
as
begin
updateempsetsal=casewhensal<2000thensal+500
whensal>3000thensal-500elsesalendwhereename=v_ename;
commit;
end;