How to map Dynamic Query columns on variables of forms.

Dear all,
This is a correct code for executing a dynamic query and display data.
In this program that I have defined variables ("BOLD" of police) later I binds these with the query (in the second code "BOLD").

How I can map a column in the query, in which case I don't know that the surveyed fields type?



GetData PROCEDURE IS
EXEC_SQL connection_id. PORT;
cursorID EXEC_SQL. CURSTYPE;
sqlstr VARCHAR2 (1000);

loc_ename VARCHAR2 (30);
loc_eno NUMBER;
loc_hiredate DATE;

nIgn PLS_INTEGER;

BEGIN
connection_id: = EXEC_SQL. DEFAULT_CONNECTION;
cursorID: = EXEC_SQL. OPEN_CURSOR (connection_id);
--
-assuming empno is a primary key for the table emp, where clause ensures
-only 0 or 1 row is returned
--
sqlstr: = "select ename, empno, hiredate from emp;
-sqlstr: = sqlstr. 'where empno =' | input_empno;

EXEC_SQL. PARSE (connection_id, cursorID, sqlstr, exec_sql. V7);
-EXEC_SQL. Bind_variable (connection_id, cursorID, ': bn', input_empno);

EXEC_SQL. DEFINE_COLUMN (connection_id, cursorID, 1 loc_ename, 30);
EXEC_SQL. DEFINE_COLUMN (connection_id, cursorID, 2, loc_eno);
EXEC_SQL. DEFINE_COLUMN (connection_id, cursorID, 3, loc_hiredate);

--
-do execute_and_fetch after the analysis of the statement and calling bind_variable and
-If necessary define_column
--

nIgn: = EXEC_SQL. EXECUTE_AND_FETCH (connection_id, cursorID);
IF (nIgn = 0) THEN
TEXT_IO. Put_line ('not Rec');
ELSE IF (nIgn = 1) THEN
TEXT_IO. Put_line ('found an employee');

END IF;
--
-get the values of this line
--
WHILE (EXEC_SQL. FETCH_ROWS (connection_id, cursorID) > 0) LOOP
-nRows: = nRows + 1;
EXEC_SQL. COLUMN_VALUE (connection_id, cursorID, 1, loc_ename);
EXEC_SQL. COLUMN_VALUE (connection_id, cursorID, 2, loc_eno);
EXEC_SQL. COLUMN_VALUE (connection_id, cursorID, 3, loc_hiredate);

MESSAGE(loc_ename||) e '|| loc_eno | » '|| loc_hiredate);

END LOOP;
END IF;
END;

If you want to use EXEC_SQL and a dynamic query with unknown data types, but the known table name,
Then you can declare a rowtype variable
for example;

 NOT TESTED ---A ROUGH IDEA
m_emp_row employee_master%rowtype;
m_col_cnt number := 0;
So when you define collumn, create a procedure to find the column name and its width if it is varchar2 with respect to the column name .
   Find the column details from the user_tab_columns table ...
---------------------------------------------------------------------------------------------------------------------------------------------------
  while m_col_cnt < 3 loop
       m_col_cnt  := m_col_cnt +1;
       proc_find_col_name_width(p_qry ,p_col_no=>m_col_cnt , p_col_name,p_col_width);

      If p_col_name = 'EMPCODE' then
         EXEC_SQL.DEFINE_COLUMN(connection_id, cursorID, m_col_cnt , m_emp_row.empcode , p_col_width);
      elsif p_col_name ='EMPNAME' then
         EXEC_SQL.DEFINE_COLUMN(connection_id, cursorID, m_col_cnt , m_emp_row.empname , p_col_width);
       -----
        -------
       end if;
  end loop;

---------------------------------------------------------------------------------------------------------------------------------------------------
--Your procedure will look like this
 procedure proc_find_col_name_width(p_qry  varchar2,p_col_no number, p_col_name out varchar2,p_col_width out number) is 

 m_col_name varchar2(30);
 Cursor c1 is
 Select  data_length
 from user_tab_columns
 where table_name = 'yr_tab_name'
 and column_name = m_col_name;
 m_lastpos number ;
 m_nxtpos number ;
 Begin
  m_lastpos := instr(p_qry,',',1,p_col_no-1);
  m_nxtpos := instr(p_qry,',',1,p_col_no);
  If m_lastpos = 0 then --- if only one col
     m_col_name := substr(p_qry,instr(upper(P_QRY),'SELECT') + 6, instr(upper(P_QRY),'FROM') -1);
  else
       If m_nxtpos = 0 then ---if last column
             m_nxtpos := instr(upper(P_QRY),'FROM') -1;
       end if;

    m_col_name := substr(p_qry,m_lastpos+1,m_nxtpos);
  End if;
  m_col_name := ltrim(rtrim(m_col_name));
  open c1;
  fetch c1 into p_col_width;
  close c1;
  p_col_name := m_col_name;
END;

same thing you must apply when retrieving values using exec_sql.column_value
concerning
Dora

Published by: Dora on December 7, 2009 12:20

Published by: Dora on December 7, 2009 12:20

Tags: Oracle Development

Similar Questions

  • How can I dynamically select the shared Variable API programming data type?

    I am trying to create a configuration of open connections of variable shared using the programming API. It seems to me that the cleanest way to do would be to put one "open and check" routine in a loop, then call it for each variable in the library.

    The question that I am running is that I have different types of data in my library (to help a server Modbus i/o and data types 'boolean' and 'single' in my library.) How can I dynamically select the data type of the shared variable API?

    See the attached snipit.

    Thank you

    What I ended up doing was doing a Subvi to open, read, write, and close each data type, I use the packaged in 4 polymorphic SubVIs (polymorphic Open, read, etc...)

    Now all I have to do I drop in the polymorphic Subvi and it switches automatically to the appropriate data type

  • How to print dynamically added columns in Flex

    Hello

    I use a component AdvancedDataGrid in Flex 3.6 application. My ADG displays a variable number of columns, so some columns are hardcoded (declared in MXML) and some are added dynamically (ActionScript). It works well. But when I try to print my ADG, only hard-coded columns are printed.

    Any idea?

    I found the problem.

    I used groupedColumns for hard-coded columns statement and I used new AdvanceDatagridColumn("columns") for the added dynamically. Fixed it using columns for both.

    Hope I could help somedy.

    Thank you

  • How to find the query select bind variables

    How to extract the variable name to bind to AS suite of sql queries
    ' SELECT NAME IN: NAME OF THE DOUBLE '
    or
    "SELECT * FROM WHERE DOUBLE (: NAME = NAME)".
    or
    "SELECT * FROM WHERE DOUBLE: NAME IS NULL'."
    or
    "SELECT * FROM WHERE DOUBLE: NAME | NAME = LAST_NAME'
    or
    ' SELECT * FROM DUAL WHERE: a = 10'
    or
    "SELECT * from where DOUBLE: A > = 10'.
    or
    "SELECT * from where DOUBLE: A < = 10 '.

    Give a solution using SUBSTR, REGEXP_SUBSTR, please answer quickly
    best answer will be marked correct/good...

    Search: and then search for the following word breaker then have the substr for them: and the separator.
    You can build an own function to find the same.

  • How to map the csv (not columns) cells in the columns of table, import with sql loader

    Given «example.csv» csv file

    I want to load the data in:

    the C7 cell in column X

    cell D8 in column Y

    cell F7 in column Z

    Oracle table "exampletable" and so on. The csv file has not ordered rows and columns, so I can't just load the csv file into a new table itself. So what I'm asking is how to map to the columns in table cells load this file into Oracle (XE). Can someone point me to a tutorial?

    I know it's quite elementary, please let me know if I am sous-prescrit anything in the question.

    I ended up doing in Excel, through a very laborious process that will probably be repeated by others.

    What a pity that there is no functionality in Oracle for this kind of data import more flexible. Analysts of data often throw himself spreadsheets that look like this (or 485 of them) who must enter data one way or another.

  • How to call a query of the support bean?

    Hi all

    Another question for you guys:

    I did a page jspx with an entry form and a "submit" button.
    When I click the button submit, the action in my grain of support my_action is executed.
    This is the code:


    public BindingContainer {} getBindings()
    Return BindingContext.getCurrent () .getCurrentBindingsEntry ();
    }

    public String my_action() {}
    BindingContainer links = getBindings();
    OperationBinding operationBinding = bindings.getOperationBinding("EmployeesView");
    Object result = operationBinding.execute ();
    If (! operationBinding.getErrors () .isEmpty ()) {}
    Returns a null value.
    }
    }

    I was hoping that the "EmployeesView" query has been run in this way, but I get the following exception:

    java.lang.ClassCastException: oracle.adfinternal.view.faces.model.binding.FacesCtrlHierBinding cannot be cast to oracle.binding.OperationBinding


    So how should I run query EmployeesView?


    Second part of the question: what happens if I typed the name of the employee in my form, and I want to
    run a query that selects all employees with the same name?
    How to make a query with a variable as input in the WHERE clause?

    Thanks in advance.

    Published by: Facehugger on 7-apr-2010 11:15

    In this case use example 9-13, access to the Interface of Client Application Module in a JSF Backing Bean using a link of Action named:
    http://download.Oracle.com/docs/CD/E15523_01/Web.1111/b31974/bcservices.htm#sthref918

    So rather than get an operation binding - get you the pointer to the AM across the link - line 4.
    Then on the AM you can call the service method, or instead, use the findViewObject method to locate your specific VO, change and then run the query on the matter. Then, wrap everything in the VO.hasNext () and use the following method on your VO for the data lines.
    And then you are iterating over the lines of the VO and add them to any list/collection you pass to the BPEL.

    This video could help in terms of interaction with a VO and get the lines:
    http://www.YouTube.com/watch?v=bgawJD4yPeY&feature=youtube_gdata

  • Tabular: how dynamically toggle columns and rows

    Hello

    I am very new to ApEx sorry if this has been addressed before, but I can't find a solution in forums or with Google, so here I am.

    I have an table based on a view, with two elements as the primary key and instead - of trigger for update (only the updates made, not of insertions/deletions) and the form works fine (I can update and refresh, etc.) The form was created with the wizard, not manually.

    My problem is, I need to turn off (disable - not hide) of columns in the report to prevent changes according to the value of one of its own columns - for example, a value of + 'q' + in the column period is going to turn some columns, while value of + 'h' + will toggle other columns. (The 'q' / 'h' value is the same for all the lines in the form.)

    Similarly, I also need to toggle all lines according to the value of the column one another .

    To sum up, displaying the form of tables and according to the value of a column, I need to turn some of the columns. Thenfor each line that I sail and, according to the value of another of the column, I need to enable/disable one or more items on this line.

    Any detailed help on how to proceed would be greatly appreciated (and if you need more information please ask.)

    It was very easily in forms with the triggers when-new-record and the elements of parameters as enabled. I am really so confused as to how to do this with ApEx - not to mention that I am helpless with JavaScript... Given that the page works well with the wizard-generated form, I want to keep it this way, but I'm ready to learn new tricks if the solution is building manually (as explained here: http://www.oracle.com/technology/products/database/application_express/howtos/tabular_form.html) or do it with a dynamic query (as explained here: http://www.oracle.com/technology/products/database/application_express/howtos/dynamic_report.html) although I'm not sure to understand things , explained here (and if she needs clean MRU treat...?)

    Thanks in advance,

    Ludovic

    You are the very welcome. I had a lot of help at the beginning of this forum so I try my best to give back. :)

    Good luck for the demo!

  • How to dynamically generate columns in conventional reports

    Hi all

    How to create dynamic columns in classic reports.

    I need to create these columns that depends on the difference of the date column start date and end date.

    for example: 4 November 2015 start_date and end_date is November 7, 2015

    I show the columns Day1, day 2, day 3 and day 4.

    and the values of these columns are checkboxes.

    Kind regards

    Arianne.

    Hi ujwala1234,

    ujwala1234 wrote:

    How to create dynamic columns in classic reports.

    I need to create these columns that depends on the difference of the date column start date and end date.

    for example: 4 November 2015 start_date and end_date is November 7, 2015

    I show the columns Day1, day 2, day 3 and day 4.

    and the values of these columns are checkboxes.

    The old packed timesheet application has the tip for how to display the day of the week selected by the user in the form of columns in the tabular presentation.

    Reference: old packages of timesheet Application

    That's how I'd do:

    • Select the range of dates populate the days between the date columns range in a collection of the APEX.
    • Display the columns as editable using the APEX_ITEM API.

    NOTE: Application of time sheets there was select list for weeks, so always the number of dynamic columns would be 7 + column code time.

    Also, the maximum number of modifiable columns, you can use on your page APEX is 50.

    Kind regards

    Kiran

  • How to add dynamic items based on the results of a dynamic query?

    Hi all

    I'm quite new to ofa, here's my problem.

    I have a table 'interventions', each intervention have actions stored in the table "actions".

    I want to show the actions of an intervention in a list, based on the id of the intervention. the response ID value is dynamic, so does not know the number of shares that you want to display in the list.

    Can someone tell me the steps to create a region that has dynamic elements to display names of action?

    Thank you

    Kind regards

    Afaf

    Afaf,.

    Take a look on the link below to see how to create dynamic VO:

    Blog of Anil Oracle Application Framework: create VO when running at the controller or dynamically created VO

    You could add messageStyled text like the code below:

    OAMessageStyledTextBean newMessageBean = (OAMessageStyledTextBean) createWebBean (pageContext, MESSAGE_STYLED_TEXT_BEAN, null,"" ");

    Links to dynamically create elements below:

    Add columns to the table advanced in OA Framework Programatically by Extension

    OPS KNOWLEDGE HELPER

    Let us know if you get any errors when creating.

    See you soon

    AJ

  • How to write a query to return rows with the varchar column that contains even a single occurrence of the characters, such as Ÿ and

    How to write a query to return rows with the varchar column that contains even a single occurrence of the characters, such as Ÿ and

    I have a table whose columns with values such as

    MINNEAŸPOLIS and ¿VV ¿A

    Only the characters that are allowed in this column are alphabets, numbers, spaces, points and supports.

    Please help to write a SQL SELECT with Regexp_like query or any other option.

    Thanks to you all! Under query worked for me. Thank you Frank to explain the concept of hooks inside regexp_like.

    SELECT * FROM testspecial, WHERE REGEXP_LIKE (sampletext, "[^] ^ A - Z ^ a - z ^ 0-9 ^ [^.]") ^ {^} ^]') ;

  • How to write a query for the data exchange between two columns?

    How to write a query for the data exchange between two columns?

    I tried a request, does NOT work.
    update tmp t1 set t1.m1=t1.m2 and t1.m2=(select t2.m1 from tmp t2 where t2.student_id = t1.student_id)
    Thank you.

    Published by: user533361 on October 23, 2009 14:04

    Just plain and simple:

    update tmp t1
     set t1.m1=t1.m2,
         t1.m2=t1.m1
    /
    

    SY.

  • dynamic query for package does not work

    Dear members,

    I have problems with a package in the creation and analysis of a dynamic query in the WHERE clause. Here is an example of what I'm trying to do:

    PROCEDURE test_status_proc)
    wtd_cursor ON cur_type
    date_1 IN date
    date_2 IN DATE
    status in VARCHAR2,
    flag in VARCHAR2)

    IS

    status_sql VARCHAR2 (250): = NULL;
    flag_sql Varchar2 (100): = NULL;

    BEGIN


    Status of the IF = 'A' THEN
    lv_status_sql: = 'A ';
    lv_flag_sql: = 'Y ';
    END IF;
    Status of the 'I' = IF THEN
    lv_status_sql: = 'A ';
    lv_flag_sql: = 'n';
    END IF;

    Status of the 'R' = IF THEN
    lv_status_sql: = "R";
    lv_flag_sql: ='* ';
    END IF;

    Status of the IF = n THEN
    lv_status_sql: = 'n';
    lv_flag_sql: ='* ';
    END IF;

    IF status_code = 'IRN' THEN
    "lv_status_sql: = '('' N'','' R'');
    lv_status_sql: = lv_status_sql | ' OR (s.status = s.flag = "A" AND "N")';
    lv_usecalc_sql: ='* ';
    END IF;

    Status of the = IF'* ' THEN
    lv_status_sql: ='* ';
    lv_flag_sql: ='* ';
    END IF;

    OPEN FOR Test_cursor

    SELECT * from test_status s
    WHERE
    s.Daytime BETWEEN date_1 AND date_2
    S.status AND decode (lv_status_sql,'* ', s.status, lv_status_sql)
    S.flag AND decode (lv_flag_sql,'* ', s.flag, lv_flag_sql);

    The problem I have is especially with the condition 'IRN '. The suite WHERE the part of the clause looks like the following in the lv_status_sql, but the query returns all the values:

    -(', 'R') OR (s.status = 'A' AND s.flag =' only)

    Any help would be much appreciated.

    Kind regards

    dreporter wrote:

    Thanks for your reply and I completely understand your frustration. The problem is sometimes it is very difficult to describe all of the problem due to several reasons. Please take a look at my last post to see if that makes sense.

    If you really need SQL dynamic - true dynamic SQL which includes dealing with dynamic number of bind variables - then DBMS_SQL are an excellent interface to use.

    You can generate the dynamic SQL statement based on the question of whether the filter criteria is null (do not use) or not null (use as a predicate). For example

    if someParam10 is not null then
      // someParam10 needs to be used as a filter predicate
      dynamicSQL := dynamicSQL || ' and some_col_10 = :someParam10 ';
    end if;
    

    This statement can then be analyzed using the DBMS_SQL interface. The binding of values uses the same logic that was used to create predicates. For example

    if someParam10 is not null then
      // someParam10 is used and needs to be bound
      DBMS_SQL.Bind( myCursor, 'someParam10', someParam10 );
    end if;
    

    So, with this approach simplistic, you can easily create a dynamic SQL with variable predicates, dynamically bind these and run the slider.

    Bind variables are used in the dynamic SQL statements, as there are very few threats of SQL injection. And the basic principles observed for shareable SQL creation - the same set of parameters not null to filter, will result in the same SQL statement, which allows the cursor within the Pool shared for this SQL statement to be reused.

    So, technically, dynamic SQL is not a major problem (if used correctly). The major problem is that if really necessary to address the requirements of the business at hand.

    The problem I have with many comments here want to use dynamic SQL statements, is that it is used as one would use a file i/o interface.

    For file IO you want standard Open(), Read(), Write() and Close() calls. And you, the appellant, simply pass the name of the file and the data to write or to receive the data read.

    Similarly, these posters want to use SQL to open a table and read and write the data column - and do it by calling simply (and dynamically) by specifying the name of the table and column. Approaches to dynamic SQL based on one such concept is wrong. And shows that much of the ignorance of what a RDBMS is and how to use an RDBMS.

  • How to make dynamic form fields updated?

    This is going to be an ugly post, just be careful! :)

    I have a form that retrieves his labels and text input field names dynamically from a database. Rather than having the form hardcoded, we are able to add new columns to a table and the form automatically adds the new labels and fields via CFQUERY.

    When the form is completed and submitted (post method), the database is supposed to be updated. However, because our names of input fields are populated through query, we can not write a query to update static when we add new elements of form.

    So, I have a solution to this (in my head), but I'm stuck in a bit of logic and can't get it in the code. I'm looking for a way to write FORM #. # fieldname # (here is where it gets ugly). Because the form sent by the post method, I find myself with a bunch of FORM.fieldname on my action page (and fieldname is generic for what are real variables).

    So here's how I am update:
    I have a table (let's call it table1) that contains a column of all the column names in the data table (table2). This table is used for query purposes only, no data is updated here of the form.
    I have a table1 request to call all the column names in table2.
    < cquery datasource = "exdb" name = "exname" >
    SELECT ColumnName
    FROM table1
    < / cfquery >
    Then I write the update query that will update the elements they are loop using CFOUTPUT:
    < CFOUTPUT QUERY = "exname" >
    < cfquery datasource = "exdb" name = "exupdate" >
    UPDATE table2
    SET #columnName # = #FORM. < columnName > #.
    WHERE itemID = #FORM.itemID #.

    It's my dilemma. As you can see, the cfoutput is a loop... So we will take the first element in the loop, call him 'name1 '. So our query update said SET name1 = #FORM.name1 #, and it will update the table with what was presented in the entry for name1 field. The cfoutput to loop again, this time it's of name2. SET name2 = #FORM.name2 #. Now, the form includes a hidden itemID to specify where the table should be updated, as you can see above. So, now that you see how it works, my problem is to get #FORM. < columnName > # FORM.name1, FORM.name2, etc.
    In Coldfusion, you would write #FORM.variable # to call a FORM element. However, given that the variable is not defined, and allows us to fill a request, we make SHAPE #. #variable # where #variable # must be resolved before #FORM. ___ #

    You are with me on this? This is very complex in the explanation, but if you need more information, I can provide more clearly. I would like to know what you think. Really, I have the solution, but to FORM #. # columnName # to solve is another problem. I think what I need is to understand the order of operations for this statement, so #columnName # resolves first.

    You'll want to use the scope structure notation when dealing with your form variables. The Form.SomeVar variable can also be written as ['SomeVar']. Using this syntax, you can do something like this:

    UPDATE table2
    SET #columnName # = #FORM [columnName] #.
    WHERE itemID = #FORM.itemID #.

    You can also look on the following to help optimize your code:
    (1) learn how to use - it could speed up your code a bit.
    (2) according to the DB that you use, you may be able to combine all of your UPDATE within 1 SQL commands block. This will allow to do all your actions with 1 DB connection database, instead of a bunch (works in MSSQL, Oracle or MySQL, not sure)

  • Hide dynamically last column in the report

    I have a classic report generated by a dynamic query. I never know how many columns will be returned by this query. I need show/hide the last column in my report. Any help would be greatly appreciated.

    Thank you
    Mark

    Hello

    as suggested, you can use jQuery selector.

    In your report the static id value we will say MYTABLE, and then in the same region in the page footer section established

    
    

    The 'tricky' part by their Summit, it is that when you set static id really put you it to the region (which is defined as a table) and not for the table that is in fact the data display. This table is part of the table for which you configure static id. That's why you use the selector "chart".

    Kind regards
    Aljaz

  • Sort on dynamic query problem!

    Hello

    I have a dynamic query written in pl/sql, when I check "Sort" for each field in the report attribute, error message resurrected as "ORA-01785: ORDER BY item must include the number of an expression in the SELECT list.
    If I do not check sort, it works very well. In my applications, I need all the fields sorted by user, how do I solve this problem?

    My query as below:

    declare
    Ask varchar2 (2000): = "select";
    s_class varchar2 (1000);
    cursor c1 is select * from demo_preference;
    Start
    for c1_val looping c1
    If c1_val.login is not null then
    query: query = | » ' || 'login ' | ',';
    end if;
    If c1_val.id is not null then
    query: query = | » ' || 'id ' | ',';
    end if;
    .......
    end loop;
    query: = SUBSTR (query, 1, length (query)-1);

    s_class: = ' (NVL (: P2_class, "%" |)) ''null%'') = ''%'' || "zero percent" OR
    EXISTS (SELECT 1 FROM apex_collections WHERE collection_name = "P2CLASSCOL" AND class = c001))';

    query: query = | » ' || ' from ming.reg_report_view1 where '.
    || ' ' || s_class;
    Return (Query);
    end;

    Maybe the internal column used when you clicked the sort is not indicated in the report. Try to use aliases when you build the query string, it might help apex internally to identify a column even if its order is changed to another user. After all, the order of the columns in the code is dynamic and I assume that even the number of displayed columns can vary that could sort on a column that is identified by a number not valid.

    How about somewhere, displaying the report query so that you know what is the exact query processing, it could give you the best information on the problem.

    If the problem persists, use a collection that is extracted these record using the same query string, then replace the report to view the collection and then set the sort column on. This way Summit could get confused about which columns are being sorted and it would just sort on a c001... C050 column as if it were a string (Yes problems with the number of sort columns when you do this).

Maybe you are looking for

  • find my iPhone feature

    How can a stolen iPhone (going online) to connect to a network so that find it my phone function works when thieves cannot get my access code switch on the phone

  • Why firefox has become bloated and lazy like IE?

    I tried like hell to stick with firefox, but it became useless. Installation of costs, on a new installation of operating system on a PC with 8 cores@3ghz and 32 GB of ram, and firefox is STILL SLOW! More than 10 tabs == random crash for a few second

  • x 64 fix added now does not print

    New HP 4630 one disaster after another. 1. wouldn't print grindlines in Excel. Who sets using the 'Better' quality obtained 2. then he cancelled the print job printing a page before it was over. Fixed with Hotfix 479775 and printed a full page. I tha

  • Ends on the responsibilities of the user

    If you finish date a responsibility on a user id, the end date is the current date.  This allows the user to have control over them until midnight.  It works well with the controls of the RCMP, because we need for the responsibilitiy of show not avai

  • Size of styles

    In Captivate 9, I try to get my message 'Try Again' in a quiz slide "Random Question" to be the same size and in the same place. I understand "styles" in regards to the formatting (color, text, etc.) but that the size of the shape and location? In th