SELECT by SDO_GTYPE
Is it possible to select geometries in a table based on their geometry type (SDO_GTYPE)? Perhaps it's just my lack of experience in building SQL statements, but I can's seem to find a way to do it.
e.g. I would like to select all polygons using something like:
SELECT * FROM table_name WHERE geometry_column.SDO_GTYPE='2003'
Thanks in advance for any help or pointers.
Jean-Marc,
Actually the quotes make no difference: the error I was getting was 'invalid column name' and the example you posted works with or without quotes.
However, your example did contain the solution to my problem: it turns out that if you don't set an alias for the table name (ie. SELECT * FROM table_name A) then you cannot access the SDO_GTYPE member in the geometry column... a small particularity of the SQL syntax that I was not aware of.
In brief:
SELECT * FROM table_name A
WHERE A.geometry_column.SDO_GTYPE=2003;
works, but
SELECT * FROM table_name
WHERE geometry_column.SDO_GTYPE=2003;
does not work.
Thanks for your help!
Similar Messages
-
Select from all tables in schema
hi, i am trying to x,y from tables in a schema, getting "missing expression" error, working with oracle 11g.
declare
v_sql varchar2(4000);
v_x number;
v_y number;
v_n number;
begin
for rec in (select table_name as table_name from all_tables where table_name like '%AM_%' ORDER BY 1) loop
v_sql := 'select a.idnumber, t.x, t.y, table(sdo_util.getvertices(a.geometry)) t FROM '||rec.table_name ||' a';
EXECUTE IMMEDIATE v_sql INTO v_n, v_x, v_y;
dbms_output.put_line(v_n||v_x||v_y);
end loop;
end;hi two rows, with idnum and geometry columns...
IDNUM
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
GD8
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(-.48230432, 51.4645609, -.47600566, 51.464582, -.47206108, 51.4645953, -.4654
6537, 51.4646174, -.46423724, 51.4646216, -.45892656, 51.4646394, -.45671873, 51
.4646468, -.45007509, 51.4646691, -.4487052, 51.4646737, -.44809122, 51.4646758,
-.44748667, 51.4646778, -.44118568, 51.4646989, -.44038184, 51.4647016, -.43534
624, 51.4647186, -.43415307, 51.4647226, -.43413338, 51.4647226, -.43410223, 51.
4647227, -.43408667, 51.4647228, -.43408688, 51.4648537, -.43408691, 51.4648694,
-.43408703, 51.4649432, -.43408705, 51.4649579, -.43408717, 51.4650319, -.4340872,
51.4650481, -.43408741, 51.465177, -.4341061, 51.4651769, -.43413411, 51.465
1768, -.43415863, 51.4651767, -.43493934, 51.4651741, -.43724392, 51.4651664, -.
4381469, 51.4651633, -.43876878, 51.4651612, -.44038073, 51.4651558, -.4409811,
51.4651538, -.44732658, 51.4651325, -.44759329, 51.4651316, -.44870078, 51.46512
79, -.45213755, 51.4651164, -.45482423, 51.4651073, -.45795448, 51.4650968, -.46
041684, 51.4650886, -.46194096, 51.4650834, -.46348669, 51.4650783, -.46492913,
51.4650734, -.46744722, 51.465065, -.47410127, 51.4650426, -.47616935, 51.465035
7, -.48152654, 51.4650177, -.48230505, 51.4650151, -.48235217, 51.4650149, -.482
35215, 51.4650018, -.48235145, 51.4645722, -.48235143, 51.4645607, -.48230432, 51.4645609))
IDNUM
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
GD4
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(-.48497261, 51.4772685, -.48209892, 51.4772786, -.48097228, 51.4772825, -.474
22571, 51.477306, -.47275437, 51.4773112, -.46898013, 51.4773243, -.46659847, 51
.4773326, -.46535204, 51.477337, -.4624971, 51.4773469, -.46135428, 51.4773509,
-.45879869, 51.4773598, -.45693251, 51.4773663, -.45570651, 51.4773706, -.453196
56, 51.4773794, -.45006644, 51.4773903, -.44747333, 51.4773993, -.44686181, 51.4774014, -.44408948,
51.4774111, -.4389499, 51.477429, -.43830451, 51.4774313, -.
4346623, 51.477444, -.43398218, 51.4774464, -.43331459, 51.4774487, -.43326608,
51.4774489, -.43326612, 51.4775874, -.43326612, 51.4776043, -.43326616, 51.47774
86, -.43326616, 51.4777641, -.43326619, 51.4779031, -.4333147, 51.4779029, -.472
655, 51.4777657, -.47413516, 51.4777605, -.48497272, 51.4777227, -.48502579, 51.
4777226, -.48502579, 51.4777106, -.48502568, 51.4772809, -.48502568, 51.4772684,
-.48497261, 51.4772685)) -
Can I select element number from table collection expression?
Hi, I know I can use COLUMN_VALUE to select column values from table collection expression. Is there any way to select the number of the element as well? (with Oracle 11.2.0.1.0)
CREATE OR REPLACE TYPE plch_numbers_nt IS TABLE OF NUMBER;
DECLARE
l_numbers plch_numbers_nt
:= plch_numbers_nt (10,
20,
30,
40,
50);
BEGIN
-- This would be nice...
FOR rec IN (SELECT COLUMN_VALUE, VALUE_INDEX FROM TABLE (l_numbers))
LOOP
DBMS_OUTPUT.put_line (rec.COLUMN_VALUE, rec.VALUE_INDEX);
END LOOP;
END;
/First of all, I would like to thank you all for your replies. I really appreciate your help.
The problem I'm trying to solve is more complicated than what I have shown so far. Right now I'm trying to decompose the problem into smaller problems. Maybe I should show you the full problem and hope that I still get a reply.
I have a spatial column with collections of geometries (SDO_GTYPE 2004) and I have a VARRAY column of objects. For each row, each geometry in the geometry collection has some information in one element in the VARRAY. So I have this table
-- +----+------------------+-----------------------------------------------------------------------------------+
-- | ID | GEOM_COLL | GEO_INFO |
-- +----+------------------+-----------------------------------------------------------------------------------+
-- | 98 | sdo_geom(2004)_1 | ((geo_info_1_1_1; geo_info_2_1_1; ...);(geo_info_1_1_2; geo_info_2_1_2; ...) ...) |
-- +----+------------------+-----------------------------------------------------------------------------------+
-- | 99 | sdo_geom(2004)_2 | ((geo_info_1_2_1; geo_info_2_2_1; ...);(geo_info_1_2_2; geo_info_2_2_2; ...) ...) |
-- +----+------------------+-----------------------------------------------------------------------------------+
-- ...and I need this
-- +----+--------------------+----------------+----------------+-----+
-- | ID | SDO_GEOM | GEO_INFO_1 | GEO_INFO_2 | ... |
-- +----+--------------------+----------------+----------------+-----+
-- | 98 | sdo_geom(2001)_1_1 | geo_info_1_1_1 | geo_info_2_1_1 | ... |
-- +----+--------------------+----------------+----------------+-----+
-- | 98 | sdo_geom(2002)_1_2 | geo_info_1_1_2 | geo_info_2_1_2 | ... |
-- +----+--------------------+----------------+----------------+-----+
-- +----+--------------------+----------------+----------------+-----+
-- | 99 | sdo_geom(2002)_2_1 | geo_info_1_2_1 | geo_info_2_2_1 | ... |
-- +----+--------------------+----------------+----------------+-----+
-- | 99 | sdo_geom(2001)_2_2 | geo_info_1_2_2 | geo_info_2_2_2 | ... |
-- +----+--------------------+----------------+----------------+-----+
-- ...I need a flat version of the original table, if you will. My original plan was to convert the VARRAY values to rows and extract the geometries into rows. Then join both using their ROWNUMs. But this does not work as i need numbers that start at 1 for each ID and I'm not sure if ROWNUM will give me the right order. Hence my question for consecutive element numbers. I have no idea how to do it with SQL. I'm working on a PL/SQL solution right now. Sample code follows. Sorry for the length of this post.
CREATE OR REPLACE TYPE geo_info AS OBJECT (
just INTEGER,
txt VARCHAR2 (255)
CREATE OR REPLACE TYPE geo_info_array AS VARRAY (10000) OF geo_info;
CREATE TABLE geometries (
id NUMBER (38) PRIMARY KEY,
geom_coll SDO_GEOMETRY,
geo_info geo_info_array
INSERT INTO geometries (id, geom_coll, geo_info) VALUES (
98,
sdo_geometry (2004, NULL, sdo_point_type (0, 0, 0),
sdo_elem_info_array (1, 1, 1, 3, 2, 1, 7, 1, 1, 9, 1, 1),
sdo_ordinate_array (5408562.081181, 5696027.239777, 5408563.398, 5696028.369, 5408568.192, 5696028.132, 5408562.643029, 5696038.558968, 5408565.328059, 5696027.0783)),
geo_info_array (geo_info (7, '10.9'),
NULL,
geo_info (7, '0.0'),
geo_info (7, '-4.8-'))
INSERT INTO geometries (id, geom_coll, geo_info) VALUES (
99,
sdo_geometry (2004, NULL, sdo_point_type (0, 0, 0),
sdo_elem_info_array (1, 2, 1, 5, 1, 1, 7, 2, 1, 11, 1, 1, 13, 1, 1),
sdo_ordinate_array (5408575.262, 5696017.841, 5408575.255, 5696017.341, 5408573.318578, 5696016.67559, 5408575.255, 5696017.341, 5408574.155, 5696017.357, 5408573.359578, 5696017.97359, 5408572.012251, 5696017.299678)),
geo_info_array (NULL,
geo_info (7, '0.5'),
NULL,
geo_info (7, '0.0'),
geo_info (7, '-1.1-'))
/ -
Selecting tolerance from user_sdo_geom_metadata
I have trouble selecting tolerance from the USER_SDO_GEOM_METADATA view.
The problem is that DIMINFO is VARRAY of 4 elements in sqlplus. I used the same logic like getting sdo_gtype from the geometry data but that did not work.
SQL> select diminfo.sdo_dim_array from user_sdo_geom_metadata
2 where table_name = 'OCF_LANDMARKS';
select diminfo.sdo_dim_array(1) from user_sdo_geom_metadata
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected UDT got NUMBER
I tried second sql but that does not work either.
select diminfo.sdo_dim_array from user_sdo_geom_metadata
ERROR at line 1:
ORA-00904: "DIMINFO"."SDO_DIM_ARRAY": invalid identifier
My question is if we can retrive just the tolerance value by specifying table name and geometry column from USER_SDO_GEOM_METADATA table usinf SQL query or we have to write pl sql program to parse the DIMINFO data.
Thank you very much
JaishriTry this query
SELECT sdo_dimname,sdo_tolerance FROM TABLE(select DIMINFO from user_sdo_geom_metadata WHERE ROWNUM=1)
instead of "ROWNUM=1" you can place any clause to select any specific metadata -
Selecting records include a second element
Hi,
I have polygon data set. Most of the polygons consist of one element. However, some of the polygons in the data set includes a second element represented in the SDO_ELEM_INFO attribute like: SDO_ELEM_INFO_ARRAY(1, 1003, 1, 23, 2003, 1). How can select objects which consist of two elements?
Regrads,Thank you for your reply. But I could not solve the problem exactly. I used the SDO_UTIL.GETNUMELEM to learn number of element in a geometry. It returned 1:
SQL> select a.objectid, SDO_UTIL.GETNUMELEM(a.geom) from polygon1 a where a.objectid=2943;
OBJECTID SDO_UTIL.GETNUMELEM(A.GEOM)
2943 1
Actually, it is a polygon with a hole and includes two elements in the SDO_ELEM_INFO attribute:
SQL> select geom from polygon1 where objectid=2943;
GEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 23, 2003, 1), SDO ORDINATEARRAY(………
I can not still select these kinds of geometries from table. -
Error message: "playlists selected for updating no longer exist"
I tried to update my ipod nano and I guess I had deleted a playlist, but since then, I have not been able to update. Every time I try, I get the following message:
"Cannot be updated because all of the playlists selected for updating no longer exist."
I haven't been able to highlight which playlists are selected to begin with.
I read through the manual and thought that maybe rebooting the whole system might work. So I deleted Itunes from my computer and re-installed.
Then I tried re-setting my ipod. So now I have nothing on my ipod.
I also deleted everything from my library, thinking it might help to start from scratch. Nothing has worked.
How do I "select" and "unselect" playlists so I can get up and running again?Here you go.
http://discussions.apple.com/thread.jspa?messageID=607312򔑐 -
Error while calling a select esb service
javax.resource.ResourceException: RollbackException: Transaction has been marked for rollback:
I encounter the above error while executing a synchronous bpel process, that invokes an esb db select service to fetch a value from the db.
the details available for the error are:
An unhandled exception has been thrown in the ESB system. The exception reported is: "java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0 at java.util.Vector.get(Vector.java:710) at oracle.tip.esb.server.common.wsif.WSIFInvoker.readResponseHeader(Unknown Source) at oracle.tip.esb.server.common.wsif.WSIFInvoker.executeOperation(Unknown Source) at oracle.tip.esb.server.common.wsif.WSIFInvoker.nextService(Unknown Source) at oracle.tip.esb.server.service.impl.outadapter.OutboundAdapterService.nextService(Unknown Source) at oracle.tip.esb.server.service.impl.outadapter.OutboundAdapterService.processBusinessEvent(Unknown Source) at oracle.tip.esb.server.dispatch.InitialEventDispatcher.dispatchNonRoutingService(Unknown Source) at oracle.tip.esb.server.dispatch.InitialEventDispatcher.dispatch(Unknown Source) at oracle.tip.esb.server.dispatch.BusinessEvent.raise(Unknown Source) at oracle.tip.esb.wsif.WSIFOperation_ESB.executeRequestResponseOperation(Unknown Source) at com.collaxa.cube.ws.WSIFInvocationHandler.invoke(WSIFInvocationHandler.java:431) at com.collaxa.cube.ws.WSInvocationManager.invoke2(WSInvocationManager.java:353) at com.collaxa.cube.ws.WSInvocationManager.invoke(WSInvocationManager.java:192) at com.collaxa.cube.engine.ext.wmp.BPELInvokeWMP.__invoke(BPELInvokeWMP.java:733) at com.collaxa.cube.engine.ext.wmp.BPELInvokeWMP.__executeStatements(BPELInvokeWMP.java:368) at com.collaxa.cube.engine.ext.wmp.BPELActivityWMP.perform(BPELActivityWMP.java:197) at com.collaxa.cube.engine.CubeEngine.performActivity(CubeEngine.java:3266) at com.collaxa.cube.engine.CubeEngine.handleWorkItem(CubeEngine.java:1696) at com.collaxa.cube.engine.dispatch.message.instance.PerformMessageHandler.handleLocal(PerformMessageHandler.java:75) at com.collaxa.cube.engine.dispatch.DispatchHelper.handleLocalMessage(DispatchHelper.java:184) at com.collaxa.cube.engine.dispatch.DispatchHelper.sendMemory(DispatchHelper.java:269) at com.collaxa.cube.engine.CubeE
Please suggest
thanx
AJDone That,
Thanx a ton Dave, it worked.
So I am finally moving on :-)
Just one question Dave, I happened to work on the Beta release of this version too, the problem was not there. How come we have been able to get it in dev preview. -
Logical operators in Oracle select query
Hello all,
Can i use logical operators in oracle select queries?
for 1 and 0 =0 ; 1 or 0 =0
if i have two fileds in a table COL1 have a value of 1010 and COL2 have a value of 0001.
Is there any way to use select col1 or col2 from table? where or is a logical operator?
Regards,Hi,
NB wrote:
Hello all,
Can i use logical operators in oracle select queries?Sure; Oracle has the logical operators AND, NOT and OR. All the comparison operators, including >, >=, = !=, EXISTS, IN, IS NULL, LIKE and REGEXP_LIKE are really logical operators, since they return logical values. You can use them in SELECT statements, and other places, too.
for 1 and 0 =0 ; 1 or 0 =0
if i have two fileds in a table COL1 have a value of 1010 and COL2 have a value of 0001.It's unclear what you want. Maybe you'd be interested in the BITAND function:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions014.htm#sthref1080
BITAND is the only logical function that I know of. Many other functions, especially numberical fucntions such as MOD, have applications in logic.
Is there any way to use select col1 or col2 from table? where or is a logical operator?Whenever you have a question, please post a little sample data (CREATE TABLE and INSERT statements), and also post the results you want from that data.
Explain how you get those results from that data.
Always say which version of Oracle you're using. -
Can not select from data dictionary view from a procedure
Hi,
I wonder, which privilege is missing here:
my schema has this roles and privs:
GRANT CONNECT, RESOURCE TO cb ;
GRANT CREATE SESSION TO cb ;
GRANT SELECT_CATALOG_ROLE TO cb ;
GRANT CREATE SYNONYM TO CB;
GRANT CREATE VIEW TO CB;
I create a procedure:
create or replace procedure dd_test as
begin
dbms_output.enable(2000000);
for r in (select table_name from sys.dba_tab_partitions where owner = 'CB') loop
dbms_output.put_line(r.table_name);
end loop;
end;
sho err
4/38 PL/SQL: ORA-00942: table or view does not exist
When I run the core statement form sql prompt, it works !
so what privilege is missing here ???
thanks for any hint, Lao DeHi,
thanks for that reply, after doing that I can not select this DD-view from sql-prompt anymore (which I don't wonder ;-). Can you tell me, what idea you had behind that test ?
I found another instance, where the procedure works and I will compare those privileges, but it's hard to sort out that complex structure of nested roles and sys_privs.
How ever, I will update here, when I found the missing privilege.
regards LaoDe -
'IF' statement in a select statment?
I have the following cursor in a package specification;
cursor c_sales_code is
select sales_condition||' MC '||sales_option
from sales;This will return something like: 'T300 MC 9'
MC means 'multiple choice' for when there are multiple options. Although, sales_option is sometimes null and in this case I just want 'T300' to be returned, not 'T300 MC'.
How would I go about doing this?
Thanks,
fakelvisUse
CASE and DECODE
to add the functoinality of Conditional Statements in Your SQL Statements..
These two CASE / DECODE will help you to get your desired output -
I need to choose between value1 and value2 within a select statement.
TableA
Flag (char)
Value1
Value2
ItemDesc
pseudo code
select ItemDesc, (if Flag = 'y' then Value1 else Value2) as Price from TableA;
How can this be done?select itemdesc,
sum (case
when flag = 'y'
then (case
when value1 < 10
then value1 * 1.2
else value1
end)
else value2
end
) as price
from tablea
group by itemdesc; -
If statement in select statement alias
I have the following select statement. It has the alias Survivors, Deaths and "All Cases". Is it posible to use :P_LANGUAGE variable to say that -- IF :P_LANGUAGE = FRENCH THEN alias are Survivants for survivors, Décès for Deaths, Tous_les_cas for All Cases. Please advise
SELECT ALL T_NTR_MULTIBAR.CAT, T_NTR_MULTIBAR.NUM_CASES_LEFTBAR AS Survivors,
T_NTR_MULTIBAR.NUM_CASES_MIDDLEBAR AS Deaths, T_NTR_MULTIBAR.NUM_CASES_RIGHTBAR AS "All Cases"
FROM T_NTR_MULTIBAR
WHERE INSTANCE_NUM = :P_INSTANCENUM
order by ORDERSYou may not be able to add this condition inside the SQL Statement. But you can add this condition outside the statement, if you're using PL/SQL...
IF :p_language = french THEN
SELECT ALL t_ntr_multibar.cat,
t_ntr_multibar.num_cases_leftbar AS survivors,
t_ntr_multibar.num_cases_middlebar AS deaths,
t_ntr_multibar.num_cases_rightbar AS "All Cases"
ELSE
END IF; -
If statement in the SELECT???
I use Coldfusion as my source for remoting with Flash. I have
created different databases for different materials. However when
an order is placed I get the "id" of the material. I also return
the "type" of material. If I would have planned this correctly I
would have just put all the materials in one database and returned
what I needed just fine. As it turns out I cannot change it.
Below is my code and basically what I'd like to do is say
that:
if bag_traits.trait_type = 1
select materials.material_name where bag_orders.bag_trait_a =
materials.material_id
So right now it's returning a 6. I need the name of the
material from the materials database with an id of 6. I also have a
ribbons table where if the trait_type = 2 then I would need the
ribbons.ribbon_name where bag_orders.bag_trait_a =
ribbons.ribbon_id.
How to I make an if or case statement that will pull the name
from the appropriate database depending on the trait_type? Thanks!C-Rock wrote:
>
> Why can I not use the material_id number in more than
one column for the
> bag_orders table?
>
As far as I know, that is not the proper way to join multiple
tables.
To join multiple tables you use multiple joins.
I.E.
FROM tableA INNER JOIN tableB ON tableA.key = tableB.key
INNER JOIN
tableC ON tableA.key = tableC.key INNER JOIN tableD ON
tableC.key =
tableD.key
Each join between to tables creates another 'relation'
(database speak
for table like object_ that you can then join to another
table to create
a new relaion and so on and so on. For complex queries it is
usually
much easier to start with the first to tables, confirm that
you return
the desire results, then add the next table. Keep adding one
table at a
time confirming you are getting the expected results each
iteration
before adding another. -
USING NULL AND SELECT ALL IN DECODE
COL1 has the following values:
COL1
====
A
B
C
A
B
C
A
D
D
SELECT COL1 FROM TABLE1 WHERE COL1 =
DECODE(:VAL1, 'A', 'AA', 'B', 'BB', 'C', 'CC', 'D', 'DD')
1. what about the null values ? how can I add to the above statements when I enter null for the parameter :VAL1
2. what about all the values in COL1, what shall I enter for :VAL1 ?
THANKS.SELECT COL1 FROM TABLE1
WHERE nvl(COL1,0) = DECODE(:VAL1, 'A', 'AA', 'B', 'BB', 'C', 'CC', 'D', 'DD',null,0)
Can we use in this way?
Shishu Paul
Chandigarh-India -
ADF Get selected values from Dynamic Lists
Hi,
I have a created a dropdown list box where the list gets value through a managed bean. On commit I want the selected value to be saved into the CardiacV1EchoSched column of the Entity object (database). The source looks like this.
<af:selectOneChoice value="#{bindings.CardiacV1EchoSched.inputValue}"
label="#{bindings.CardiacV1EchoSched.label}"
valuePassThru="true">
<f:selectItems value="#{TTrack.carScheList}"/>
</af:selectOneChoice>
The problem is that getCardiacV1EchoSched() in the entity object class is null. The selected value does not get passed into #{bindings.CardiacV1EchoSched.inputValue} at all. If I bind the value to a variable in managed bean I get the selected value.
Thanks in advance,Hi,
not sure which business service you use to update the database, but if you use ADF Business Components then you need to call the commit operation
Frank
Maybe you are looking for
-
Hi all, My requirement is to Create Custom Infotyp 9100 with two new subtypes(9001 & 9002). Subtype 9002 will pick up relationship data from the subtype of Infotype 0021 IT9801 u2013 Subtype 9001 PERNR EmpNo NUMC 8 ZISNo Serial No
-
When i put in a compact flash card iphoto automaticaly comes up to import my photos. I have to exit out of iphoto to use the editing softwear that i prefer to use every time. It is very annoying. How do i prevent this from happening? I have looked in
-
how can I edit external e-mails accounts configurations I had on Mobile Me mail and now are on iCloud?
-
Lables / Ratings wont add - cache issue too
Labels/ nor ratings will not Add. I rebooted, no luck. I hate having to reset preference, but I did that too and labels wont add still. I have a big project to edit, and am putting it on hold for a bit becuase of this. Incidentlaly, I had an intern s
-
My ipod says i don't have access privilages? what do i do ?
When i plug in my ipod it says i don't have enough access privilages , what do i do ?