2012-07-27 155 views
1

網絡似乎有點短,應該是相當常見的東西的工作示例。簡單的簡單例子「給我一些記錄」。這是我第一次存儲過程,我只想看一些記錄。爲什麼這麼難以翻轉? ;-)我認爲,如果我能得到一個有效的例子,我可以從那裏調整到我真正可以使用的東西。這來自我在網上找到的另一個例子。不會編譯,因爲CURSOR聲明是某種語法錯誤。簡單的teradata存儲過程

CREATE PROCEDURE "SCHEMA"."GETRESULTSET (
    IN "p1" VARCHAR(30)) 
DYNAMIC RESULT SETS 1 
BEGIN  
DECLARE CURSOR cur1 WITH RETURN ONLY TO CLIENT FOR 
SELECT partitioninfo FROM SCHEMA.SessionInfo where username = p1;  
    OPEN cur1;  
END; 

無論如何,當然可以使用線索。我看到一個CURSOR與SQL分開聲明的例子,但是之後並沒有一個例子說明如何在聲明爲VARCHAR時將變量存入SQL中。我正在努力工作的例子非常老,但這是我能找到的最好的例子。

回答

1

Teradata MACRO將是您所描述的更好的解決方案。

REPLACE MACRO [MyDB].GetResultSet(p1 VARCHAR(30)) AS (
SELECT "Partition" 
    FROM DBC.SessionInfo 
WHERE UserName = :p1; 
); 

EXEC MyDB.GetResultSet 

雖然存儲過程可以用來完成其他流行的數據庫系統(甲骨文,SQL Server等)使用的任務光標基於邏輯可導致不良Teradata的編程習慣。通常,在Teradata中處理大型遊標會降低性能。在其他數據庫管理系統中使用光標所提供的許多功能都可以在基於SET的邏輯中儘可能地完成。

即被稱爲遊標可以在Teradata中成功使用,以執行某些需要條件邏輯或動態SQL處理的任務。我希望這會有所幫助,如果你有更具體的例子,你需要幫助,我很樂意提供一些建議。

編輯: 這DDL爲你的程序對工作的Teradata 13.10:

CREATE PROCEDURE "SCHEMA"."GETRESULTSET" (
    IN "p1" VARCHAR(30)) 
DYNAMIC RESULT SETS 1 
BEGIN  
DECLARE cur1 CURSOR WITH RETURN ONLY TO CLIENT FOR 
SELECT "Partition" FROM "SCHEMA".SessionInfo where username = p1;  
    OPEN cur1;  
END; 

光標名稱必須進行CURSOR鍵字。 PartitionInfo不是DBC.SessionInfo上的有效列。不知道「架構」是否被MyBatis取代,所以你可能不得不調整SELECT語句。

+0

哎呀,我的壞。我應該更清楚我的目標。我們的想法是創建一個存儲過程,該存儲過程返回一個記錄集,以便我們稍後可以測試存儲過程,該存儲過程返回針對MyBatis的記錄集以獲得概念驗證。嗯......這可能是有趣的,但添加測試用例。 Mybatis可以稱爲宏嗎?好問題。 – user447607 2012-07-28 13:04:52

+0

大急流城,密歇根州?我最初來自密歇根州的戴維森。 :-) – user447607 2012-07-28 13:10:20

+0

:) - 小世界。查看我的編輯,查看Teradata 13.10的存儲過程的測試版本。在我測試的副本中,我用「DBC」.SessionInfo替換了「SCHEMA」.SessionInfo。 – 2012-07-28 14:29:26