kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
Tom Halladay
Tom Halladay
Question

Bagaimana cara mendeklarasikan dan menggunakan variabel dalam PL/SQL seperti yang saya lakukan dalam T-SQL?

Di Sql Server, sering kali ketika saya menguji tubuh prosedur tersimpan, saya menyalin tubuh ke dalam SSMS, DECLARE variabel di bagian atas halaman, mengaturnya ke beberapa nilai sampel, dan mengeksekusi tubuh apa adanya.

Misalnya, jika proc saya adalah

CREATE PROC MySampleProc
    @Name   VARCHAR(20)
AS
    SELECT @Name

Maka test sql saya adalah

DECLARE @Name VARCHAR(20)
SET     @Name = 'Tom'

    SELECT @Name

Apa padanan Oracle PL/SQL untuk ini?

Ini adalah yang paling dekat yang saya dapatkan, tetapi saya mendapatkan "PLS-00428: klausa INTO diharapkan dalam pernyataan SELECT ini &"

DECLARE
   myname varchar2(20);
BEGIN
     myname := 'Tom';

     select myname from DUAL;
END;

Ini adalah contoh yang lebih baik dari apa yang sebenarnya saya coba lakukan:

DECLARE
   myname varchar2(20);
BEGIN
     myname := 'Tom';

     SELECT *
     FROM   Customers
     WHERE  Name = myname;
END;

Tapi sekali lagi, ia menginginkan 'INTO' padahal sebenarnya saya hanya ingin catatan dicetak di layar, bukan disimpan di tabel lain....

DISELESAIKAN:

Terima kasih kepada @Allan, saya sudah bisa bekerja dengan cukup baik. Oracle SQL Developer rupanya mengingat nilai parameter yang Anda berikan. PL/SQL Developer, bagaimanapun, tidak ingin ada hubungannya dengan ini....

masukkan deskripsi gambar di sini

Jika Anda "Run As Script", ia akan mematuhi default Anda, tetapi hanya akan mengembalikan hasil sebagai teks ASCI, bukan dalam grid/spreadsheet

masukkan deskripsi gambar di sini

24 2012-06-04T18:48:15+00:00 3
Tom Halladay
Tom Halladay
Pertanyaan edit 6 Juni 2012 в 2:58
Pemrograman
oracle
sql-server
tsql
plsql
oracle-sqldeveloper
Solution / Answer
 Allan
Allan
4 Juni 2012 в 7:53
2012-06-04T19:53:10+00:00
Lebih
Sumber
Sunting
#16353086

Jawaban yang Direvisi

Jika Anda tidak memanggil kode ini dari program lain, pilihannya adalah melewatkan PL/SQL dan melakukannya secara ketat dalam SQL menggunakan variabel bind:

var myname varchar2(20);

exec :myname := 'Tom';

SELECT *
FROM   Customers
WHERE  Name = :myname;

Dalam banyak alat (seperti Toad dan SQL Developer), menghilangkan pernyataan var dan exec akan menyebabkan program meminta Anda untuk nilai.


Jawaban Asli

Perbedaan besar antara T-SQL dan PL/SQL adalah Oracle tidak mengizinkan Anda mengembalikan hasil query secara implisit. Hasilnya harus selalu dikembalikan secara eksplisit dengan cara tertentu. Cara paling sederhana adalah dengan menggunakan DBMS_OUTPUT (kira-kira setara dengan print) untuk mengeluarkan variabel:

DECLARE
   myname varchar2(20);
BEGIN
     myname := 'Tom';

     dbms_output.print_line(myname);
END;

Hal ini tidak terlalu membantu jika Anda mencoba mengembalikan sebuah set hasil. Dalam hal ini, Anda ingin mengembalikan koleksi atau refcursor. Namun, menggunakan salah satu dari solusi tersebut akan membutuhkan pembungkus kode Anda dalam fungsi atau prosedur dan menjalankan fungsi/prosedur dari sesuatu yang mampu mengkonsumsi hasilnya. Fungsi yang bekerja dengan cara ini mungkin terlihat seperti ini:

CREATE FUNCTION my_function (myname in varchar2)
     my_refcursor out sys_refcursor
BEGIN
     open my_refcursor for
     SELECT *
     FROM   Customers
     WHERE  Name = myname;

     return my_refcursor;
END my_function;
 Allan
Allan
Jawaban edit 12 Agustus 2013 в 4:12
20
0
 GriffeyDog
GriffeyDog
4 Juni 2012 в 8:26
2012-06-04T20:26:53+00:00
Lebih
Sumber
Sunting
#16353087

Dalam Oracle PL/SQL, jika Anda menjalankan query yang mungkin mengembalikan beberapa baris, Anda memerlukan kursor untuk mengiterasi hasilnya. Cara paling sederhana adalah dengan for loop, mis:

declare
  myname varchar2(20) := 'tom';
begin
  for result_cursor in (select * from mytable where first_name = myname) loop
    dbms_output.put_line(result_cursor.first_name);
    dbms_output.put_line(result_cursor.other_field);
  end loop;
end;

Jika anda memiliki query yang mengembalikan tepat satu baris, maka anda dapat menggunakan sintaks select...into..., contoh:

declare 
  myname varchar2(20);
begin
  select first_name into myname 
    from mytable 
    where person_id = 123;
end;
4
0
 rkosegi
rkosegi
4 Juni 2012 в 7:02
2012-06-04T19:02:14+00:00
Lebih
Sumber
Sunting
#16353085

Variabel tidak didefinisikan, tetapi dideklarasikan.

Ini mungkin duplikat dari https://stackoverflow.com/questions/8469301/declare-variables-in-a-pl-sql-block

Tetapi Anda bisa melihat di sini:

http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/fundamentals.htm#i27306

http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/overview.htm

UPDATE:

Lihat di sini : https://stackoverflow.com/questions/2153053/how-to-return-a-resultset-cursor-from-a-oracle-pl-sql-anonymous-block-that-exe

 Community
Community
Jawaban edit 23 Mei 2017 в 12:16
1
0
Related communities 3
Oracle Indonesia
Oracle Indonesia
714 pengguna
Group belajar, diskusi, dan berbagi tentang berbagai produk dan teknologi Oracle. Disclaimer: This group is not in any affilation nor maintained by the Oracle.
Buka telegram
OrcV2 🇲🇨Indonesia🇮🇩
OrcV2 🇲🇨Indonesia🇮🇩
99 pengguna
Website : https://orcv2token.tech/ Tg Global : https//t.me/orcv2
Buka telegram
Oracle_id
Oracle_id
58 pengguna
Oracle_id adalah komunitas Penikmat Oracle seluruh Indonesia, fokus membahas product2 Oracle
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
工藤 芳則
Terdaftar 6 hari yang lalu
2
Ирина Беляева
Terdaftar 1 minggu yang lalu
3
Darya Arsenyeva
Terdaftar 1 minggu yang lalu
4
anyta nuam-nuam (LapuSiK)
Terdaftar 1 minggu yang lalu
5
Shuhratjon Imomkulov
Terdaftar 1 minggu yang lalu
ES
ID
JA
KO
RU
TR
ZH
© kzen.dev 2023
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi