We're Moving!

The Vertica Forum is moving to a new OpenText Analytics Database (Vertica) Community.

Join us there to post discussion topics, learn about

product releases, share tips, access the blog, and much more.

Create My New Community Account Now


How to declare a variable in SQL Script? — Vertica Forum

How to declare a variable in SQL Script?

In other database platforms it is possible to declare a variable that will hold a single value. Is this possible in Vertica, googling and searching the docs I haven't discovered that it is.

Eg, in Transact SQL:
DECLARE @lastIdentityValue smallint;
SELECT @lastIdentityValue = SCOPE_IDENTITY();


Comments

  • Navin_CNavin_C Vertica Customer
    Hi Neil,

    You can set a variable in this way

    \set variable_name value

    example :
    \set lastIdentityValue "value"

    You can check your variable like this:

    select :lastIdentityValue ;

    Also one more way to check:

    \echo :lastIdentityValue

    In Vertica usage of variable is not very flexible. So you need to use some scripting language to use variables with vertica.

    Hope this helps
  • Thanks Navin.

    I had tried using this, but found an issue:

    dbadmin=> \set id = LAST_INSERT_ID();

    dbadmin=> SELECT :id;ERROR 4856:  Syntax error at or near "=" at character 8
    LINE 1: SELECT =LAST_INSERT_ID();

    Is there a way to have the subject of the assignment evaluated? (eg: so that I get the value of the LAST_INSERT_ID() rather than the text?

    Thanks,

    Neil

  • Navin_CNavin_C Vertica Customer
    Hi Neil

    You tried 
    dbadmin=> \set id = LAST_INSERT_ID();
    Instead Try this

    dbadmin=> \set id LAST_INSERT_ID

    Currently I dont't think there is way to assign a function to a variable,
    As I said Vertica variables are not very flexible.

    You can get some help with this:

    \set t_pwd 'pwd'
    \set file_path :t_pwd/dir_name

    This is how I use one variable into another variable.

    Hope this helps
  • Hi all,

    Thanks Navin for answering this; you're right (and Neil is on the right track), that's really all we provide by way of variables at this point.

    That said, if I can just jump in briefly:  In some cases, people find our WITH statement to be useful:

    https://my.vertica.com/docs/7.0.x/HTML/index.htm#Authoring/SQLReferenceManual/Statements/SELECT/WITH...

    For recordsets, "CREATE LOCAL TEMP TABLE <name> AS SELECT ..." or "CREATE LOCAL TEMP VIEW <name> AS SELECT ..." (depending on whether you want eager or lazy evaluation, respectively) is functionally equivalent to a variable containing a recordset, though it is certainly a more-cumbersome syntax.

    Adam
  • Thanks for this Adam, in particular the lazy evaluation version of a Common Table Expression which I wasn't aware of.

    The concrete issue that I'm trying to solve using a variable is the assignment of the LAST_INSERT_ID() value to a variable, such that it can be used in subsequent statements (both as a value in insert statements, and as an argument supplied to where clause predicates in select statements.

    Issues I've encountered include:
    • Meta-function last_insert_id cannot be used in INSERT
    • Meta-function ("last_insert_id") cannot be used with non-Select clauses
    We're considering moving to using sequences rather than autoincrement constraints as a consequence of this.

    Any advice on this?
    Does using a sequence rather than an autoincrement column constraint bring any performance penalties?

    Thanks,

    Neil


  • Thanks again Navin.

    Not trying to use a non-existent = assignment operator is the trick! Thanks!



  • Slight update to this...

    Following from Navin's advice above I'm now using a variable with the auto_increment.

    Would still be interested in any details on the tradeoff between sequences, auto_increment, and identity in terms of performance.

    Thanks,

    Neil
  • hello everybody 
    would you explain, how can i declare a .(dot) special character in table of sql
    for example like exam.rk@gmail.com  then here not allowed a . character. so kindly give responce to me
    Thank you!

  • Hi, I used this,  a table instead a variable

     

     

    DROP TABLE IF EXISTS MySCHEMA.Temp_Calendar;

     

    CREATE TEMP TABLE MySCHEMA.Temp_Calendar
    ON COMMIT PRESERVE ROWS
    AS(
            Select     Current_Date as Fecha
    );

    Select Fecha From VariableCompensation.Temp_Calendar

     

    you can use the field as a result of subquery

     

     

     

     

  • is there a way to pass variables while running the queries via jdbc ? If so , could some one send some samples how to achieve that? i am basically looking for equivalent of  vsql -v option in jdbc api's.

Leave a Comment

BoldItalicStrikethroughOrdered listUnordered list
Emoji
Image
Align leftAlign centerAlign rightToggle HTML viewToggle full pageToggle lights
Drop image/file