I managed to make this work:
declare ftp fluent_ftp := fluent_ftp(); begin ftp.run( ftp.for_country('UG', ftp.for_period('2011', '01', '01', ftp) ) ); end;
To enable this type of syntax I had to create a custom type in PL/SQL first.
CREATE OR REPLACE TYPE schema.fluent_ftp AS OBJECT ( country_cd VARCHAR2(2), fin_year_cd VARCHAR2(4), fin_month_cd VARCHAR2(4), fin_day_cd VARCHAR2(4), CONSTRUCTOR FUNCTION fluent_ftp RETURN SELF AS RESULT, CONSTRUCTOR FUNCTION fluent_ftp ( a_fin_year_cd VARCHAR2, a_fin_month_cd VARCHAR2, a_fin_day_cd VARCHAR2, a_country_cd VARCHAR2 ) RETURN SELF AS RESULT,
Internally the new type just calls the existing API so no changes are needed on the underlying API at all.
MEMBER PROCEDURE run(a_fluent_ftp fluent_ftp) IS BEGIN schema.calculate_ftp.run(a_country_cd => a_fluent_ftp.country_cd, a_system_code => '', a_fin_year_cd => a_fluent_ftp.fin_year_cd, a_fin_month_cd => a_fluent_ftp.fin_month_cd, a_fin_day_cd => a_fluent_ftp.fin_day_cd); EXCEPTION WHEN OTHERS THEN RAISE; END run;
So that is how you can mimic the Fluent notation that the .NET community is enjoying currently on products like Fluent NHibernate and others.
No comments:
Post a Comment