Teradata Masukkan Hitungan ke dalam Variabel

Deskripsi apa yang saya coba lakukan:

Saya memiliki 2 lingkungan yang satu memiliki data (X) yang kedua tidak memiliki data (Y).

Saya telah melakukan prosedur yang memiliki parameter input P_TableName. Ini harus memeriksa apakah dalam tabel ini ada data dan JIKA Ada maka kita akan membawa data ke lingkungan Y.

Jadi Sebagian besar berfungsi tetapi saya punya masalah dengan satu hal yang sangat sederhana (saya tidak punya banyak pengalaman dalam TD tetapi di Oracle itu akan menjadi 10 detik).

Saya harus meneruskan jumlah pilihan (*) dari X ke variabel bagaimana cara melakukannya?.

Saya mencoba dengan SET VAR = SELECT... INSERT INTO VAR SELECT... Saya mencoba membuat variabel untuk pernyataan yang langsung dieksekusi

        SET v_sql_stmt = 'INSERT INTO ' || VAR|| ' SELECT COUNT(*) FROM ' || P_TableName;
        CALL DBC.SYSEXECSQL(v_sql_stmt);

Ini mungkin hal yang sangat sederhana tetapi saya tidak dapat menemukan solusi yang baik untuk itu. Tolong bantu


person Emwi    schedule 07.02.2018    source sumber


Jawaban (2)


Anda harus membuka kursor untuk mengambil hasilnya karena Anda menjalankan SQL dinamis. Ada contoh bagus di Dokumen bantuan Teradata tentang SQL Dinamis:

CREATE PROCEDURE GetEmployeeSalary
(IN EmpName VARCHAR(100), OUT Salary DEC(10,2))
BEGIN
  DECLARE SqlStr VARCHAR(1000);
  DECLARE C1 CURSOR FOR S1;
  SET SqlStr = 'SELECT Salary FROM EmployeeTable WHERE EmpName = ?';
  PREPARE S1 FROM SqlStr;
  OPEN C1 USING EmpName;
  FETCH C1 INTO Salary;
  CLOSE C1;
END;
person JNevill    schedule 07.02.2018

Anda tidak dapat menggunakan INTO dalam SQL Dinamis di Teradata.

Sebagai solusinya, Anda perlu melakukan kursor yang mengembalikan satu baris:

DECLARE cnt BIGINT;
DECLARE cnt_cursor CURSOR FOR S;
SET v_sql_stmt = ' SELECT COUNT(*) FROM ' || P_TableName;
PREPARE S FROM v_sql_stmt;
OPEN cnt_cursor;
FETCH cnt_cursor INTO cnt; 
CLOSE cnt_cursor;
person dnoeth    schedule 07.02.2018