ไม่สามารถส่งผ่านพารามิเตอร์ภายในกระบวนงานที่เก็บไว้เป็น redshift

ฉันได้เขียนขั้นตอนที่เรียกพารามิเตอร์ในแบบสอบถามแบบใช้เลือกข้อมูลแล้ว แต่มันไม่ทำงาน เมื่อฉันพิมพ์พารามิเตอร์นั้น มันทำงานได้ดี แต่เมื่อใช้แบบสอบถามแบบใช้เลือกข้อมูล มันไม่ทำงาน

ฉันใช้ Aginity workbench สำหรับ redshift เพื่อดำเนินการขั้นตอนที่เก็บไว้

CREATE or replace PROCEDURE get_tbl_name(IN tablename varchar, IN columnname VARCHAR, IN mindate varchar) AS $$
Declare
evalmindate varchar;
BEGIN
Raise info 'tablename = %, columnname = %, mindate = %', tablename,columnname,mindate;
if mindate is null then
select min(columnname) into evalmindate from tablename;
else
evalmindate=mindate;
end if;
END;
$$ LANGUAGE plpgsql;

Calling Proc:
call get_tbl_name('test_bq', 'date',NULL);

Output:
tablename = test_bq, columnname = date, mindate = <NULL>
Error Message
42601: syntax error at or near "$2"

จากเอาต์พุต เราสามารถเห็นพารามิเตอร์ภายในขั้นตอนเมื่อฉันพิมพ์ แต่ฉันไม่สามารถส่งพารามิเตอร์ไปยังแบบสอบถามแบบใช้เลือกข้อมูลได้ เนื่องจากเกิดข้อผิดพลาด กรุณาช่วยฉันด้วยเรื่องนี้


person Venugopal Seetharaman    schedule 12.08.2019    source แหล่งที่มา
comment
การเริ่มต้นด้วย select min(columnname) into evalmindate from tablename; ไม่ถูกต้อง คุณไม่ได้ใช้ตัวแปร จริงๆ แล้วคุณกำลังพยายามค้นหา columnname ในตารางชื่อ tablename   -  person demircioglu    schedule 13.08.2019
comment
@ mdem7 แม้ว่าฉันจะส่งพารามิเตอร์ไปยังตัวแปรและส่งตัวแปรเพื่อเลือกแบบสอบถาม มันก็ไม่ทำงาน ได้รับข้อผิดพลาดเดียวกัน   -  person Venugopal Seetharaman    schedule 13.08.2019


คำตอบ (1)


คุณไม่สามารถใช้ตัวแปรเป็นชื่อคอลัมน์หรือตารางได้โดยตรงในคิวรีกระบวนงานที่เก็บไว้ คุณต้องเขียนสตริงการสืบค้นและดำเนินการแทน

นอกจากนี้ ไวยากรณ์ INTO var จะต้องมาก่อนในการสืบค้นธรรมดา และ สุดท้าย ใน EXECUTE

คุณมี:

select min(columnname) into evalmindate from tablename;

ลองสิ่งนี้:

EXECUTE 'select min('|| columnname ||') from '|| tablename ||';' INTO evalmindate;
person Joe Harris    schedule 14.08.2019